Curso Arduino Nivel i Lz

TALLER DE ARDUINO NIVEL I DURACIÓN 16 HORAS PROF. LUIS ZURITA www.arduino.cc CONTENIDO DEL CURSO 1. ¿QUÉ ES ARDUINO?

Views 109 Downloads 2 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

TALLER DE ARDUINO NIVEL I DURACIÓN 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: • PRÁCTICA 1: LED BLINK • PRÁCTICA 2 : SEMÁFORO • PRÁCTICA 3 : DISPLAY 7 SEGMENTOS

www.arduino.cc

Prof. Luis Zurita

CONTENIDO DEL CURSO 7. ENTRADAS DIGITALES: • PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED • PRÁCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR • PRÁCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES 8. ENTRADAS ANALÓGICAS: • PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA

www.arduino.cc

Prof. Luis Zurita

CONTENIDO DEL CURSO 9. SALIDAS ANALÓGICAS: • PRÁCTICA 8 : CONTROL DE INTENSIDAD DE UN LED (PWM) 10. COMUNICACIÓN SERIAL RS232/USB: • PRÁCTICA 9 : COMUNICACIÓN SERIAL. MIDIENDO Y TRANSMITIENDO TEMPERATURA CON LM35 • PRÁCTICA 10: TERMOSTÁTO SERIAL • PRÁCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIÓN SERIAL • PRÁCTICA 12: RECEPCIÓN DE DATOS Y COMUNICACIÓN SERIAL 11. PLUS: • SIMULACIÓN EN PROTEUS DEL ARDUINO UNO www.arduino.cc

Prof. Luis Zurita

¿QUÉ ES ARDUINO?

• Arduino es una plataforma de prototipos electrónica de código abierto (open-source) basada en hardware y software flexibles y fáciles de usar. Está pensado para artistas, diseñadores, como hobby y para cualquiera interesado en crear objetos o entornos interactivos. • Arduino puede sentir el entorno mediante la recepción 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 autónomos o se pueden comunicar con software en ejecución 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 diseños de referencia del hardware (archivos CAD) están disponibles bajo licencia open-source, por lo que eres libre de adaptarlas a tus necesidades. • Arduino recibió una mención honorífica en la sección 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 computación física. Microchip, Parallax Basic Stamp, Netmedia de BX24, Phidgets, Handyboard del MIT, y muchos otros ofrecen una funcionalidad similar. Todas estas herramientas toman los detalles complicados de la programación de microcontroladores y se envuelve en un paquete fácil de usar. Arduino también 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 comparación con otras plataformas de microcontroladores. La versión menos costosa del módulo Arduino puede ser ensamblado a mano, e incluso los módulos 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 mayoría de los sistemas de microcontrolador se limitan a Windows. • Simple medio ambiente, programación clara: El entorno de programación de Arduino es fácil 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 programación Processing, para que los estudiantes que están aprendiendo a programar en ese entorno estarán familiarizados con la apariencia de Arduino

www.arduino.cc

Prof. Luis Zurita

¿POR QUÉ ARDUINO? • El código abierto y el software de Arduino extensible: se publica como herramientas de código abierto, disponible para la extensión por programadores experimentados. El idioma se puede ampliar a través de bibliotecas de C ++, y la gente que quiere entender los detalles técnicos se puede dar el salto de Arduino para el lenguaje de programación AVR C en el que se basa. Del mismo modo, puede agregar código AVR-C directamente en sus programas de Arduino si quieres. • El código abierto y el hardware ampliable: El Arduino se basa en la familia de microcontroladores de Atmel ATMEGA8 y ATmega168. Los planes para los módulos están publicados bajo una licencia de Creative Commons, por lo que los diseñadores de circuitos con experiencia pueden hacer su propia versión del módulo, ampliándolo y mejorándolo. Incluso los usuarios con poca experiencia pueden construir la versión tablero del módulo con el fin de entender cómo funciona y ahorrar dinero. 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

CARACTERÍSTICAS Y RECURSOS ESPECIALES CARACTERÍSTICAS PIC 16F873

CARACTERÍSTICAS 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 MÓDULOS PWM (10 BITS RESOLUCIÓN) 6 PWM (8 BITS RESOLUCIÓN) 5 CONVERTIDORES A/D 10 BITS RESOLUCIÓN

6 CONVERTIDORES A/D 10 BITS RESOLUCIÓN

COMUNICACIÓN I2C

COMUNICACIÓN I2C

COMUNICACIÓN SERIAL SÍNCRONA (SSP)

COMUNICACIÓN SERIAL SÍNCRONA (SSP)

COMUNICACIÓN SERIAL ASÍNCRONA (USART)

COMUNICACIÓN SERIAL ASÍNCRONA (USART)

COMUNICACIÓN PUERTO PARALELO www.arduino.cc

NO POSEE 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

PINES ENTRADAS/SALIDAS DIGITALES PULSADOR RESET

PINES COMUNICACIÓN SERIAL

CONECTOR USB

CONECTOR ICSP ATMEGA328P CONECTOR ALIMENTACIÓN 9-12VDC

PINES ENTRADAS ANALÓGICAS • 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 través de TX/RX estos pines quedan inutilizados para E/S • Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analógicas tipo PWM

www.arduino.cc

Prof. Luis Zurita

2. Descargar el entorno Arduino. http://arduino.cc/en/Main/Software Adicionalmente puedes encontrar amplia información sobre Arduino, tutoriales, ejemplos en su página web oficial: http://arduino.cc/en/Guide/HomePage 3. Conectar la placa. • El Arduino Uno, Mega, Duemilanove y Arduino Nano muestran automáticamente la alimentación de la conexión USB a la computadora o mediate una fuente de alimentación externa. • Conecte la placa Arduino al ordenador mediante el cable USB. El LED verde de alimentación (etiquetado PWR ) debe continuar.

www.arduino.cc

Prof. Luis Zurita

PRIMERA CONEXIÓN ARUINO

www.arduino.cc

Prof. Luis Zurita

PRIMERA CONEXIÓN ARUINO

www.arduino.cc

Prof. Luis Zurita

4. Instalar los drivers USB. • Instalación 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 instalación del controlador. Después 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 continuación, 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 sección de LPT, COM y busque en la sección "Otros dispositivos" para "Dispositivo desconocido". • Haga clic derecho en el "UNO Arduino ( COMxx ) "puerto y elegir la opción" Actualizar software de controlador ". • A continuación, seleccione la opción "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 versión 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 instalación del controlador de allí. 5. Inicie la aplicación Arduino. Haga doble clic en la aplicación Arduino. (Nota: si se carga el software de Arduino en un idioma incorrecto, puede cambiarlo en el diálogo de preferencias.

www.arduino.cc

Prof. Luis Zurita

CAMBIO DE IDIOMA Seleccione: Archivo » Preferencias

www.arduino.cc

Prof. Luis Zurita

CONOCIENDO EL ENTORNO ARDUINO

ÁREA DE TRABAJO

¿Qué es un Sketch? Es el nombre que usa Arduino para un programa. Es la unidad de código que se sube y ejecuta en la placa Arduino Sketch: Bosquejo, esquema, croquis

ZONA DE ESTADO Y MENSAJES DE ERROR

www.arduino.cc

Prof. Luis Zurita

ESTRUCTURA DEUN UN PROGRAMA ESTRUCTURA DE PROGRAMA • La función void setup ( ) se utiliza cuando se inicia un boceto (Sketch). Se usa para inicializar variables, modos de pines, uso de librerías, etc La función de setup sólo se ejecutará una vez, después de cada arranque o reinicio de la placa Arduino. • Después de crear la función setup ( ), la función 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 void setup() { sección del código ensetup el code loophere, ( )tose para controlar // put your run utiliza once: } placa Arduino. activamente la

www.arduino.cc

void loop() { // put your main code here, to run repeatedly: }

Prof. Luis Zurita

ESTRUCTURA DEUN UN PROGRAMA ESTRUCTURA DE PROGRAMA • Los comentarios se pueden realizar de dos maneras: – Por bloque de líneas: /* Comentario del programa */ – Por líneas: // Comentario del // Programa • Los comentarios no son leídos por el compilador, por lo void setup() { que puedes escribir lo que quieras después de ella. Al // put your setup code here, to run once: } comentar su código como este puede ser particularmente void loop()tanto { útil para explicar, a sí mismo y a otros, cómo // put your main code here, to run funciona su programa repeatedly: paso a paso. 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 línea 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 código, su valor será utilizado. En este caso, la persona que escribió el código podría no haberse molestado en definir la variable led y utilizar simplemente 13 en todas las partes en que debiese especificar el número del pin. www.arduino.cc

Prof. Luis Zurita

ESTRUCTURA DE UN PROGRAMA La ventaja de utilizar una variable es que se hace mucho más fácil mover el LED a un pin diferente: solo necesitas editar la línea 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 // mayoría de las placas Arduino // darle un nombre: El mensaje " Pin 13 tiene un LED // conectado en la mayoría de las placas Arduino " es un // comentario.

www.arduino.cc

Prof. Luis Zurita

TIPOS DE DATOS. Arduino trabaja con los siguientes tipos de variables: Especificación Significado Tamaño 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

Carácter

1 byte

-128 to 127

byte

Entero 8 bits

1 byte

0 to 255

string

Cadena de caracteres usados para textos

void www.arduino.cc

Sin valor

nulo

Ninguno Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

www.arduino.cc

Prof. Luis Zurita

PINES ENTRADAS/SALIDAS DIGITALES PULSADOR RESET

PINES COMUNICACIÓN SERIAL

CONECTOR USB

CONECTOR ICSP ATMEGA328P CONECTOR ALIMENTACIÓN 9-12VDC

PINES ENTRADAS ANALÓGICAS • 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 través de TX/RX estos pines quedan inutilizados para E/S • Los pines 3,5,6,9,10,11 se pueden utilizar como salidas analógicas tipo PWM

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK Con resistencia Sin resistencia (Solo con el pin 13)

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK Diagrama de flujo (Planificación)

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK

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

www.arduino.cc

Prof. Luis Zurita

PROGRAMA PRINCIPAL

CONFIGURACIÓN ASIGNACIÓN PUERTOS E/S VARIABLES

PRÁCTICA 1 : LED BLINK //INTERMITENTE ledPin = 13; / / Definición de la salida en el PIN 13 void setup() //Configuración { 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) }

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK • Seleccione su tarjeta

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK • 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. www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK • Compila el Programa Blink Ahora, simplemente haga clic en el botón «verificar» en el IDE.

• En la parte inferior se verificará que el programa esté compilado correctamente, en caso contrario se mostrará la línea en donde se encuentra el error:

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 1: LED BLINK • Carga el Programa Blink Ahora, simplemente haga clic en el botón «cargar» en el IDE.

• 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 después de que finalice la carga, debería 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. www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 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 línea. Hay 1000 milisegundos en un segundo, por lo que la linea: delay(1000); // esperar un segundo www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 2 : SEMÁFORO Diagrama de flujo (Planificación) R1

D1

ROJO 330R

R2

D1

AMARILLO 330R

R3 VERDE

D1 GND

330R

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 2 : SEMÁFORO

www.arduino.cc

Prof. Luis Zurita

CONFIGURACIÓN PUERTOS E/S

ASIGNACIÓN VARIABLES

PRÁCTICA 2 : SEMÁFORO // Encedido y apagado de 3 LEDs Del semáforo int ROJO= 6; // Define las salidas de los LED´s 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); }

www.arduino.cc

Prof. Luis Zurita

PROGRAMA PRINCIPAL

PRÁCTICA 2 : SEMÁFORO 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); }

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 3 : DISPLAY 7 SEGMENTOS

a f

a

b

f

g

g

c

e

e

b

d

DP

c d CATODO COMUN

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 3 : DISPLAY 7 SEGMENTOS LTS4710AR a

AC

f

b

AC

g c e

www.arduino.cc

DP d

7= a 8= b 9= c 10= d 11= e 12= f 13= g Prof. Luis Zurita

PRÁCTICA 3 : DISPLAY 7 SEGMENTOS HDSP-515L g f AC a b

7= a 8= b 9= c 10= d 11= e 12= f 13= g www.arduino.cc

e d AC c DP

Prof. Luis Zurita

CONFIGURACIÓN ASIGNACIÓN VARIABLES PUERTOS E/S FUNCIÓN DE DISPLAY

int pausa=1000; // Variable que define el intervalo // de tiempo entre cada digito void setup() { pinMode(7, OUTPUT); // Asignación 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); }

www.arduino.cc

Prof. Luis Zurita

PROGRAMA PRINCIPAL

void loop() //Funcion principal // Dependiendo de cada dígito, se envía a la función 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 común delay(pausa); display (1,0,0,1,1,1,1); //escribe 1 para display ánodo común delay(pausa); display (0,0,1,0,0,1,0); //escribe 2 para display ánodo común delay(pausa); display (0,0,0,0,1,1,0); //escribe 3 para display ánodo común delay(pausa); display (1,0,0,1,1,0,0); //escribe 4 para display ánodo común delay(pausa); display (0,1,0,0,1,0,0); //escribe 5 para display ánodo común delay(pausa); display (0,1,0,0,0,0,0); //escribe 6 para display ánodo común delay(pausa); display (0,0,0,1,1,1,1); //escribe 7 para display ánodo común delay(pausa); display (0,0,0,0,0,0,0); //escribe 8 para display ánodo común delay(pausa); display (0,0,0,1,1,0,0); //escribe 9 para display ánodo común delay(pausa); } PARA ÁNODO COMÚN

www.arduino.cc

Prof. Luis Zurita

PROGRAMA PRINCIPAL

void loop() //Funcion principal // Dependiendo de cada dígito, se envía a la función display // los estados (0 y 1) a cada uno de los segmentos { display (1,1,1,1,1,1,0); //escribe 0 para display cátodo común delay(pausa); display (0,1,1,0,0,0,0); //escribe 1 para display cátodo común delay(pausa); display (1,1,0,1,1,0,1); //escribe 2 para display cátodo común delay(pausa); display (1,1,1,1,0,0,1); //escribe 3 para display cátodo común delay(pausa); display (0,1,1,0,0,1,1); //escribe 4 para display cátodo común delay(pausa); display (1,0,1,1,0,1,1); //escribe 5 para display cátodo común delay(pausa); display (1,0,1,1,1,1,1); //escribe 6 para display cátodo común delay(pausa); display (1,1,1,0,0,0,0); //escribe 7 para display cátodo común delay(pausa); display (1,1,1,1,1,1,1); //escribe 8 para display cátodo común delay(pausa); display (1,1,1,0,0,1,1); //escribe 9 para display cátodo común delay(pausa); } PARA CÁTODO COMÚN

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED VCC

GND

R1

R2

1k

1k

SALIDA

SALIDA

PullUp GND

www.arduino.cc

PullDown VCC

Divisor de tensión específico. Lee el estado lógico sin ambigüedades

Prof. Luis Zurita

PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED Diagrama de flujo (Planificación)

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

www.arduino.cc

Prof. Luis Zurita

PROGRAMA CONFIGURACIÓN ASIGNACIÓN PRINCIPAL PUERTOS E/S VARIABLES

PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED /* Pulsador Detecta si el botón 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); }

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 4 : LEYENDO UN PULSADOR Y ACTIVANDO UN LED

• 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»

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

Relé electromecánico

el Relé es un dispositivo, que funciona como un interruptor controlado por un circuito eléctrico en el que, por medio de un electroimán, se acciona un juego de uno o varios contactos que permiten abrir o cerrar otros circuitos eléctricos independientes.

Circuito Eléctrico VCC

RL1 D1

RLY-SPCO

1N4004

R3

Q1 2N3904

PIN10 1k

GND

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

Relé de estado sólido R4

1

U1

6

PIN uC 330R

R5 1k

2

U2

4

BT136

MOC3021

1 2 HACIA LA CARGA 110VAC

GND

Optoacoplador (Optotriac) www.arduino.cc

TRIAC Prof. Luis Zurita

PRÁCTICA 5 : ACTIVANDO UNA CARGA 110 VAC SIN PULSADOR

Montaje en el Arduino

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 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

PRÁCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES

PROGRAMA PRINCIPAL

CONFIGURACIÓN ASIGNACIÓN PUERTOS E/S VARIABLES

// 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);} www.arduino.cc Prof. Luis Zurita

PRÁCTICA 6 : ACTIVANDO UNA CARGA 110 VAC DESDE DOS PULSADORES else { digitalWrite(LED, LOW); MEMO=0; delay(20);}

CONTINUACIÓN DE PROGRAMA PRINCIPAL

} 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);} } } } www.arduino.cc Prof. Luis Zurita

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA PINES ENTRADAS ANALÓGICAS

• Existen 6 canales de entradas analógicas: AN0 .. AN5. • Las entradas analógicas deben variar entre 0 y 5v. • La conversión se realiza con una precisión de 10 Bits (0 a 1024) www.arduino.cc

ATMEGA328P

Prof. Luis Zurita

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA • El uso de un potenciómetro y uno de los pines de entrada analógica/digital de Arduino (ADC) permite leer valores analógicos que se convertirán en valores dentro del rango de 0-1024. • Es posible utilizar un potenciómetro simular una entrada analógica o bien un sensor de tipo resistivo. Es posible también conectar Sensores cuya salida sea de 0 a 5v.

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA • analogRead (pin) Lee el valor de un determinado pin definido como entrada analógica con una resolución de 10 bits. Esta instrucción sólo 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 analógicos (0-5) a diferencia de los pines digitales, no necesitan ser declarados como INPUT u OUTPUT porque son siempre INPUT’s. www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA

www.arduino.cc

Prof. Luis Zurita

CONFIGURACIÓN PUERTOS E/S

ASIGNACIÓN VARIABLES

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA int POTEN = 0; // seleccionamos el pin de entrada para el //potenciómetro int LEDV = 2; // seleccionamos los pines de los leds int LEDA = 3; int LEDR = 4; int valor; // variable para almacenar el valor del potenciómetro 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); }

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 7 : POTENCIOMÉTRO COMO ENTRADA ANALÓGICA

PROGRAMA PRINCIPAL

void loop() { // Lee el valor del Potenciometro: valor = analogRead(POTEN); delay(100); A: Sigue aquí if (valor umbral)//compara lectura del sensor con el margen de disparo { digitalWrite(outPin, HIGH); Serial.println("ALARMA ACTIVADA"); } www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 10: TERMOSTÁTO SERIAL else { digitalWrite(outPin, LOW); Serial.println("ALARMA DESACTIVADA"); } delay(1000); // Delay de 1 segundo } El sketch usa enteros largos de 32 bits (long integers) para calcular el valor. La letra L después del número ocasiona que el cálculo sea optimizado usando matemáticas de entero largo. Así que la multiplicación de la máxima temperatura (500 para 5V de Arduino) y el valor leido de la entrada analógica no desbordará el formato de 32 bits. Si se necesitan los valores en Fahrenheit, podremos convertir el valor usando la siguiente fórmula: float f = (celsius * 9)/ 5 + 32 ); www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIÓN SERIAL

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIÓN SERIAL

www.arduino.cc

Prof. Luis Zurita

int LED = 13; PRÁCTICA 11: CONTADOR DE EVENTOS int Boton = 10; Y COMUNICACIÓN SERIAL int valor = 0; int contador = 0; void setup(){ Serial.begin(9600); // Configura velocidad de transmisión 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); } www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIÓN SERIAL

www.arduino.cc

Prof. Luis Zurita

int LED = 13; PRÁCTICA 11: CONTADOR DE EVENTOS int Boton =10; Y COMUNICACIÓN SERIAL int valor = 0; int contador = 0; int estadoanteriorboton = 0; void setup() { Serial.begin(9600); // Configura velocidad de transmisión a 9600 pinMode(LED, OUTPUT); // inicializa como salida digital el pin 13 pinMode(Boton, INPUT); // inicializa como entrada digital el 7 } void loop() Problemas con rebote { 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; }www.arduino.cc Prof. Luis Zurita

PRÁCTICA 11: CONTADOR DE EVENTOS Y COMUNICACIÓN SERIAL Presione el Monitor Serial una vez cargado el programa para observar la cuenta desde el Arduino Uno

www.arduino.cc

Prof. Luis Zurita

PRÁCTICA 12: RECEPCIÓN DE DATOS Y COMUNICACIÓN SERIAL /* * Sketch de recepción serial * Blink al LED proporcional al valor del dígito 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