0% encontró este documento útil (0 votos)
86 vistas48 páginas

Taller Arduino

Este documento describe talleres sobre sistemas electrónicos y prototipado con Arduino. Se discuten conceptos como diseño de dispositivos inteligentes, sensores, actuadores, ejemplos comerciales, y qué es Arduino. También cubre programación básica en Arduino, E/S digital y análoga, comunicación serial, manejo de bits, visores de 7 segmentos, y interrupciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
86 vistas48 páginas

Taller Arduino

Este documento describe talleres sobre sistemas electrónicos y prototipado con Arduino. Se discuten conceptos como diseño de dispositivos inteligentes, sensores, actuadores, ejemplos comerciales, y qué es Arduino. También cubre programación básica en Arduino, E/S digital y análoga, comunicación serial, manejo de bits, visores de 7 segmentos, y interrupciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 48

Talleres Tecnológicos en materias de

fabricación digital:
Sistemas Electrónicos

Prototipado Electrónico:
Sistemas Embebidos y Microcontroladores

Prototipado con Arduino

Enrique Germany Morrison Pablo Aqueveque Navarro


Email: [email protected] Email: [email protected]
Diseño de un Dispositivo Inteligente
Características Deseadas

• Interactivo
• Sensores

• Inteligente
• Manejo de Información

• Funcional
• Almacenamiento
de datos
• Contextual
Diseño de un Dispositivo Inteligente

Entradas Procesamiento Salidas

Botón pulsador LED


Switches Pantalla LCD

Potenciómetro Pantalla RGB

Teclado Señal Analógica


Otro dispositivo
Comunicación Digital
Sensor
Movimiento Motor
Sensores
Actuadores
Ejemplos Comerciales
Arduino y el Prototipado Electrónico
¿Qué es Arduino?

• Plataforma estandarizada hardware/software diseñada para facilitar el


desarrollo rápido de sistemas embebidos sencillos
• Hardware
• MCU
• Diseño de tarjeta y asignación de pines
• Factor de forma
• Software
• Lenguaje de programación
• Funciones de biblioteca

• Naturalmente, uniformar implica en muchos casos sub-utilizar recursos


para ajustarse a un modelo común.
Arduino

• Adhiere al factor de forma de Arduino


• Software con un gran repositorio de programas (sketches) y
bibliotecas para periféricos.
• Programación en Arduino
• Plataforma abierta de desarrollo basada en Código Arduino
• Esencialmente lenguaje C estándar con extensiones y modificaciones
introducidas por Arduino.
• Pueden encontrar información adicional y ejemplos en
http://arduino.cc
Un sketch Arduino simple

const int buttonP = 12;


const int ledP = LED_BUILTIN;

void setup()
{
pinMode(buttonP, INPUT);
pinMode(ledP, OUTPUT);
}

void loop()
{
int buttonState = digitalRead(buttonP);

if (buttonState == HIGH)
digitalWrite(ledP, HIGH);
else
digitalWrite(ledP, LOW);
}
Funciones setup() y loop ()

• setup() se ejecuta una vez al principio del programa

• El código en loop() se ejecuta en un bucle infinito

• Estas funciones pueden llamar a otras funciones regulares de C y


otras funciones definidas por el usuario o una librería.
Ciclo de control de Flujo
• Ciclo if/else
• if(condicion) {
….Codigo….
}
else{
….Codigo….
}

• Ciclo while
• while(condicion){
….Codigo….
}

• Ciclo for()
• for(valor inicial;valor final;incremento) {
….Codigo….
}
Entrada/salida digital

• pinMode() - Define si un pin del MCU es entrada o salida


• Argumentos: número del pin y tipo (INPUT, OUTPUT)
• Típicamente definidos en setup()

• digitalRead() - Retorna el estado lógico de un pin de entrada


• Argumento: número de pin
• Retorna HIGH, LOW

• digitalWrite() - Escribe en un pin de salida


• Argumentos: número de pin, valor lógico
Conexiones Básicas – LEDs y Botones
Pulsadores
LED Botones Pulsadores

Resistencia
limitadora
de corriente

Ejemplo:
Red LED. Vf = Aproximadamente 2.2V.
Vr = 5-2.2 = 2.8V.
Iled = 2.8/330 = 8.4848... ~+ 8.5 mA.
Pines Arduino Uno - Alias

• LED_BUILTIN
User LED

• Mapeo de otros pines a conectores externos en manual de la tarjeta,


directamente con numero de pin.
Actividad 1

• Probar ejemplo anterior en tarjeta Arduino Uno


Actividad 2

• Escribir un sketch que encienda 4 LEDs, de uno en uno y en secuencia


mediante presiones consecutivas del botón 1, y en la secuencia
inversa con el botón 2.
Efecto Rebote de los pulsadores
Funciones de tiempo (I)

• delay(tiempo)
• Detiene la ejecución del programa por la cantidad de tiempo
especificada (en milisegundos)

• delayMicroseconds(tiempo)
• Igual a delay(), pero tiempo se especifica en microsegundos.
• Actualmente preciso sólo para retardos de hasta 16.383 us
• No recomendado para retardos mayores de unos pocos miles de
microsegundos
Actividad 3

• Repetir ejemplo anterior, pero ahora eliminando el efecto de rebote


del botón.
Funciones de tiempo (II)

• millis()
• Retorna el tiempo transcurrido (en milisegundos) desde el inicio del
programa
• Utilizar un unsigned long
• Utiliza un timer del MCU para llevar la cuenta independientemente del
programa. Se resetea cada aproximadamente 50 días.
• Utilizado para tareas de tiempo real

• micros()
• Equivalente a millis(), en microsegundos.
• Se resetea cada aproximadamente 70 minutos
• Resolución de 4-8 us.
Actividad 4

• Repetir el ejemplo anterior, pero ahora en vez de encender el LED,


hacer que parpadee cada 1 segundo.
Escritura a consola serial

• Arduino posee funciones para realizar comunicación serial


con un computador remoto u otros dispositivos

• Usando ARDUINO IDE, la puerta serial de programación


puede usarse además para interactuar con una consola
“Serial Monitor”. La tarjeta puede enviar información a
Serial Monitor usando las funciones de comunicación serial.

• Nota: Al iniciar Serial Monitor, la tarjeta MCU se reinicia.


Funciones de comunicación serial
• Serial.begin(speed)
• Inicializa la puerta serial (en startup)
• speed configura la velocidad de comunicación en baudios (9600 por defecto
en Serial Monitor)
• Serial.end()
• Deshabilita la comunicación serial, dejando los pines disponibles para E/S
general
Funciones de comunicación
serial
• Serial.println(string)
• Envía un string en ASCII por la puerta. Serial Monitor lo
imprime. Agrega un retorno de carro al final
• Serial.print(arg)
• Envía un string en ASCII por la puerta.
• arg puede ser un número entero (12), o punto flotante (3.14)
o un caracter ASCII (‘Z’), o un string (“Hola”)
• Un segundo parámetro puede especificar el formato para
números enteros (BIN, OCT, DEC, HEX), o la cantidad de
decimales para punto flotante.
• Más adelante veremos otras funciones.
Actividad 5

• Repetir el sketch anterior, pero ahora desplegar en la consola serial el


número del LED que está parpadeando cada vez que éste cambie.
Manejo de bytes y bits
• lowByte(entero)
• Extrae el byte menos significativo de un entero
• highByte(entero)
• Extrae el byte más significativo de un entero
• word(variable)
• Convierte valor de variable de cualquier tipo a una
palabra entero
• word(byteH, byteL)
• Forma una palabra a partir de dos bytes
• bitRead(numero, posicion)
• Retorna el valor de un bit del número.
• bitWrite(número, posicion, valor)
• Escribe un bit del número
• bitClear(número, posicion), bitSet(número, posicion)
Manejo de bytes y bits

• bitRead(entero, pos)
• Retorna el valor del bit en la posición “pos” del valor “entero”
• bitWrite(entero, pos, valor)
• Escribe el valor “valor” en el bit “pos” de la variable “entero”
• bitSet(entero, pos)
• Fija en 1 el bit “pos” de la variable “entero”
• bitClear(entero, pos)
• Fija en 0 el bit “pos” de la variable “entero”
• bit(n)
• Calcula el valor 2n
Visor de 7 segmentos – Arreglo de LEDs
Actividad 6

• Escriba un sketch que cuente de 0 a 9 cada un segundo y despliegue


el número en un visor de 7 segmentos.
Manejo de variables análogas

• analogReference(tipo) - Arduino AVR Boards (Uno, Mega, etc.)


• Fija el tipo de referencia para el conversor A/D
• DEFAULT: the default analog reference of 5 volts (on 5V Arduino boards) or 3.3 volts
(on 3.3V Arduino boards)
• INTERNAL: an built-in reference, equal to 1.1 volts on the ATmega168 or ATmega328P
and 2.56 volts on the ATmega8 (not available on the Arduino Mega)
• INTERNAL1V1: a built-in 1.1V reference (Arduino Mega only)
• INTERNAL2V56: a built-in 2.56V reference (Arduino Mega only)
• EXTERNAL: the voltage applied to the AREF pin (0 to 5V only) is used as the reference.

• analogRead(canal)
• Retorna el valor digital del valor análogo en el pin “canal”. Pueden usarse
alias A0, A1, A2, A3, etc.
Actividad 6a

• Escriba un sketch que muestree una variable análoga cada 5ms y


despliegue en un visor de 7 segmentos un valor entre 0 y 9
proporcional a la señal
Interrupciones

• Todos los ejemplos que hemos visto


anteriormente se basan en la técnica de
polling
• Software consulta cada el estado de una entrada
con un período de tiempo definido
• Pero en algunas ocasiones el período puede
ser muy corto, o desconocido
• Para estos casos, el MCU puede reaccionar a
entradas externas mediante interrupciones
Interrupciones

• Una interrupción es una señal cuyo estado o cambio de estado


interrumpe la ejecución normal de un programa y provoca un
salto a una dirección específica que depende de la interrupción
• Interrupciones no son necesariamente externas al MCU
• Algunos módulos periféricos internos también generan interrupciones
• Ej. Fin de conversión A/D, temporizador con cuenta expirada, comparador
análogo, recepción por puerta serial, SPI o I2C, buffer disponible para transmitir,
etc.
• Arduino sólo soporta interrupciones externas
Interrupciones externas en Arduino

• noInterrupts()
• Deshabilita interrupciones
• interrupts()
• Vuelve a habilitar interrupciones
• Estas funciones permiten delimitar una sección del
código principal (de loop) donde se permite que
señales externas interrumpan la ejecución del
programa
Interrupciones en Arduino

• attachInterrupt(interrupt, function, mode)


• interrupt: The first parameter to attachInterrupt is an interrupt
number. Normally you should use digitalPinToInterrupt(pin) to
translate the actual digital pin to the specific interrupt number. For
example, if you connect to pin 3, use digitalPinToInterrupt(3) as the
first parameter to attachInterrupt.

• function: nombre de la función que se desea ejecutar


cuando ocurra la interrupción

• mode: evento en el pin de entrada correspondiente que


genera la interrupción: LOW, HIGH, CHANGE, RISING,
FALLING
Actividad 7

• Escriba un sketch que cuente de 0 a 9 y despliegue el número en un


visor de 7 segmentos. La cuenta debe aumentar cada vez que se
presione un botón pulsador. Atienda el evento mediante
interrupciones.
Interrupciones en Arduino

• detachInterrupt(interrupt)
• Desactiva una interrupción específica
Notas

• Dentro de una rutina de atención de interrupciones,


delay() no funciona, y el valor retornado por millis()
y micros() no cambia.
• Es posible perder datos seriales recibidos durante la
ejecución de la rutina de atención
• Si la rutina de atención modifica una variable global
del programa, ésta debe ser declarada como
“volatile”
Comunicación serial

• En Arduino, 1 puerta serial (Serial)


• En Arduino Mega, 3 puertas seriales (Serial1 –
Serial3)
• Serial.begin(velocidad)
• Ej. Serial.begin(9600);
• Serial.begin(velocidad, config)
• Formato: SERIAL_DPS
• D: número de bits de datos: 5-8
• P: Paridad: N (sin paridad), E (par), O (impar)
• S: número de bits de parada: 1-2
• Ej. Serial.begin(19200, SERIAL_8E1);
Comunicación serial

• Serial.available()
• Indica si hay datos disponibles en el buffer de recepción (el buffer almacena hasta
64 bytes)
• Ej. if (Serial.available()) { …
• Serial.read()
• Extrae y retorna el primer byte del buffer de recepción, si éste tiene datos.
• Ej. Dato = Serial.read();
• Serial.write(dato)
• Escribe información binaria en la puerta serial.
• Dato puede ser un byte, un string, o un arreglo de bytes
• Ej. Serial.write(45);
• Ej. Serial.write(“Hola mundo”);
• Ej. char vec[10]; ….; Serial.write (vec, 7);
Sensor ADXL335 - Acelerómetro

VCC = 3.3V !!!


Manejo de Multiples Displays 7 Segmentos
Tecnica de barrido secuencial

Permite
reducir los pines
de salidas
digitales
necesarios para
visualizar
Actividad 8

• Escriba un sketch que despliegue el valor digital adquirido


por el conversor A/D en un arreglo de 3 visores de 7
segmentos. El conversor está conectado a un acelerómetro,
que entrega tres valores análogos correspondientes a la
aceleración en los ejes X, Y y Z. Adquiera cada 50ms de los
3 canales. Utilice el botón 1 para seleccionar cuál de los 3
canales desplegar en el visor.
• Maneje los visores usando una técnica de barrido en que el
MCU controla un visor a la vez, encendiendo
secuencialmente los 3 visores a una velocidad suficiente
para que los 3 valores se puedan visualizar
adecuadamente. Intente con 5ms por visor.
Actividad 9

• Escriba un sketch que reciba un número decimal de 3 dígitos en


forma de string por la puerta serial, y despliegue el valor en 3 visores
de 7 segmentos controlados en modo de barrido.
Sensor de distancia Ultrasónico
Actividad 10

• Escriba un sketch que utilice el sensor ultrasónico de distancia. Utilice


3 displays de 7 segmentos para desplegar la distancia en cm y
además genere una columna de 6 leds, que indiquen rangos de
distancias.

También podría gustarte