Práctica04.Programando Arduino

23
Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto Práctica 04: Programando Arduino

Transcript of Práctica04.Programando Arduino

Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto

Práctica 04: Programando Arduino

Sistemas Electrónicos Programables

Entradas / Salidas Digitales

Las líneas de ES digitales están numerados desde el 0

hasta n (dependiendo del modelo de Arduino utilizado).

No pueden ser entrada y salida a la vez, sólo una de las dos

cosas pero pueden alternarse en ejecución.

Algunas pueden tener multiplexadas funcionalidades

adicionales.

‘~’ significa que puede funcionar como salida de PWM.

‘TX’ y ‘RX’ son un puerto serie (que se utiliza para la grabación del

microcontrolador)

Las líneas de Entrada / Salida permiten escribir

o leer valores digitales (‘0’ o ‘1’) en los pines del

microcontrolador.

Sistemas Electrónicos Programables

Entradas / Salidas Digitales (continuación…)

Para indicar si un pin es de entrada o de salida:

En un pin configurado como salida; para establecer

un estado en una salida:

En un pin configurado como entrada; para leer el

estado de una entrada:

void pinMode(pin, [INPUT | OUTPUT])

void digitalWrite(pin, [LOW | HIGH])

int digitalRead(pin)

Sistemas Electrónicos Programables

Entradas / Salidas Digitales (continuación…)

Ejercicio 1:

Encender durante un segundo y apagar durante otro segundo un

diodo LED colocado en el pin 6.

#define LED 6

// the setup routine runs once when you press reset:

void setup() {

pinMode(LED, OUTPUT);

}

// the loop routine runs over and over again forever:

void loop() {

digitalWrite(LED, HIGH); // turn the LED on

delay(1000); // wait for a second

digitalWrite(LED, LOW); // turn the LED off

delay(1000); // wait for a second

}

Sistemas Electrónicos Programables

Entradas / Salidas Digitales (continuación…)

Ejercicio 2:

Encender un diodo LED colocado en el pin 6 mientras se active un

pulsador colocado en el pin 2.

#define LED 6

#define BUTTON 2

void setup() {

pinMode(LED, OUTPUT);

pinMode(BUTTON, INPUT);

}

void loop() {

if (digitalRead(BUTTON) == HIGH)

digitalWrite(LED, HIGH); // turn the LED on

else

digitalWrite(LED, LOW); // turn the LED off

}

Sistemas Electrónicos Programables

Entradas / Salidas Digitales (continuación…)

En aquellos sensores que necesitan una resistencia

de Pull-Up, con Arduino se puede configurar por

software una resistencia interna que tiene el

microcontrolador.

void pinMode(pin, INPUT_PULLUP)

Si lo que se requiere es una resistencia Pull-Down, ésta deberá ser

externa ya que el microcontrolador sólo proporciona resistencias Pull-Up

Sistemas Electrónicos Programables

Efecto Rebote

Cuando se trabaja con conmutadores o pulsadores

electromecánicos, es inevitable que se produzca un

pequeño arqueo eléctrico al actuar sobre ellos; lo

que se conoce como rebote.

El periodo transitorio de un rebote depende de diversos

factores como son las calidad de los componentes y la

rapidez de su accionamiento.

Por defecto, se toman 20mS como el tiempo máximo de

un rebote.

Sistemas Electrónicos Programables

Efecto Rebote (continuación…)

¿Cómo podemos solucionar este problema?

V

t Se pulsa el botón Se suelta el botón

+5V

Sistemas Electrónicos Programables

Comunicación Serie

En Arduino la comunicación por defecto es Full-Duplex, 8 bits de datos, sin paridad y 1 bit de stop. La velocidad en baudios se selecciona al inicializar el puerto

serie.

Todos los modelos de Arduino utilizan el primer puerto serie para la grabación del microcontrolador por medio del bootloader.

La Comunicación Serie permite a un sistema

embebido comunicarse con otro sistema

embebido, con algunos sensores o actuadores,

módulos de comunicación o con un PC de forma

alámbrica.

Sistemas Electrónicos Programables

Comunicación Serie (continuación…)

El puerto serie en Arduino es tratado como un objeto estático llamado Serial. Los que tienen más de un puerto se llamarán Serial1, Serial2…

Los pines para el puerto serie son fijos y hay que buscarlos en las especificaciones.

Suelen estar serigrafiados en las placas como RX y TX.

Los que tienen más de un puerto serán RX1, TX1; RX2, TX2…

En la recepción, los datos recibidos se guardan en un buffer y se leen de uno en uno.

Una vez leído un dato, este se elimina del buffer.

Sistemas Electrónicos Programables

Comunicación Serie (continuación…)

Para inicializar un puerto serie:

Para enviar datos por puerto serie:

Para recibir datos por puerto serie:

Consultar el número de datos recibidos y que no

hayan sido leídos aún:

Serial.begin(baudios)

Serial.print(datos)

Serial.println(datos)

Serial.write(valor)

byte Serial.read()

Devuelve ‘0xFF’ si no se

ha recibido nada

int Serial.available()

Sistemas Electrónicos Programables

Comunicación Serie (continuación…)

Ejercicio 3:

Enviar por el puerto serie un ‘1’ cuando se active un pulsador

situado en el pin 2.

Ejercicio 4:

Encender un diodo LED situado en el pin 8 cuando se reciba por

puerto serie el carácter ‘H’ y apagarlo cuando se reciba ‘L’.

Sistemas Electrónicos Programables

Entradas Analógicas

Las líneas de entrada analógica están numerados

desde el A0 hasta An (dependiendo del modelo de

Arduino utilizado).

Todas ellas pueden ser utilizadas como entradas/salidas

digitales.

Algunas pueden tener multiplexadas funcionalidades

adicionales.

Las líneas de Entrada Analógica permiten leer

tensiones analógicas y convertirlas a un valor

entero interpretable por el programador.

Sistemas Electrónicos Programables

Entradas Analógicas (continuación…)

Las entradas analógica no requieren ninguna

inicialización ya que siempre van a ser de entrada.

Para leer la tensión analógica de una entrada

analógica:

int analogRead(pin)

El valor leído se será 0 con 0V en la entrada y 1023 con

5V en la entrada; el resto, valores proporcionales.

Sistemas Electrónicos Programables

Entradas Analógicas (continuación…)

Ejercicio 5:

Leer el valor del potenciómetro conectado al pin A1 y enviar por

puerto serie dicho valor en voltios.

Sistemas Electrónicos Programables

Salida PWM

Arduino trata esta técnica como si se trabajara con

una salida analógica.

¿Qué aplicaciones tiene?

La Modulación en Anchura de Pulsos de una

señal es una técnica que modifica el ciclo de

trabajo de una señal periódica; para transmitir

información o para controlar la energía entregada

V

t

V

t Señal 1 Señal 2

Sistemas Electrónicos Programables

Salida PWM (continuación…)

En un pin configurado como salida; para general una

señal PWM en la salida:

void analogWrite(pin, value)

La frecuencia de la señal PWM será aproximadamente de

490Hz; y el ciclo de trabajo estará entre 0 (nivel bajo todo el

periodo) y 255 (nivel alto todo el periodo).

Sistemas Electrónicos Programables

Salida PWM (continuación…)

Ejercicio 6:

Leer el valor analógico proporcionado por el potenciómetro

conectado en el pin A1 e iluminar el diodo LED conectado en el

pin 6 de forma proporcional.

Sistemas Electrónicos Programables

Por medio de estas Funciones de Tiempo se

pueden realizar esperas bloqueantes o es

posible medir el tiempo en milisegundos o

incluso en microsegundos

Funciones de Tiempo

Una espera bloqueante significa que durante ese

tiempo no se tiene ningún control sobre los

periféricos.

¿Qué problemas tiene esto?

Sistemas Electrónicos Programables

Funciones de Tiempo (continuación…)

Espera en milisegundos:

Espera en microsegundos:

Tiempo transcurrido desde que se ha encendido el

microcontrolador en milisegundos:

Tiempo transcurrido desde que se ha encendido el

microcontrolador en milisegundos:

unsigned long millis()

unsigned long micros()

void delay(milisegundos)

void delayMicroseconds(microsegundos)

Sistemas Electrónicos Programables

Funciones de Tiempo (continuación…)

Ejercicio 7:

Programar un reloj en tiempo real con una precisión de décimas

de segundo. Visualizar en una terminal serie el reloj con el

siguiente formato: 00:00.0 (minutos:segundos.decimas)

[implementarlo de dos formas diferentes: haciendo esperas y

controlando el tiempo transcurrido].

Sistemas Electrónicos Programables

Librería SoftwareSerial

El Arduino uno soporta 1 puerto serie hardware y el

Mega hasta 4 puertos serie hardware.

Limitaciones:

Si se crea mas de un componente SoftwareSerial, sólo

uno de ellos puede estar recibiendo datos.

Se puede perder información.

El hardware de Arduino soporta una única

comunicación serie; por medio de la librería

SoftwareSerial se podrán implementar nuevos

puertos de comunicación.

Esta presentación está sujeta a la licencia de Reconocimiento

de Creative Commons mediante la cual se permite la copia, la

distribución, la comunicación pública y la generación de obras

derivadas sin ninguna limitación siempre que se cite al autor y

se mantenga el aviso de la licencia.

© 2014, Jonathan Ruiz de Garibay

Algunos derechos reservados