Post on 17-Jul-2015
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