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