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

Práctica04.Programando Arduino

  • 1.
    Sistemas Electrónicos Programables Facultadde Ingeniería, Universidad de Deusto Práctica 04: Programando Arduino
  • 2.
    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.
  • 3.
    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)
  • 4.
    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 }
  • 5.
    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 }
  • 6.
    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
  • 7.
    Sistemas Electrónicos Programables EfectoRebote  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.
  • 8.
    Sistemas Electrónicos Programables EfectoRebote (continuación…)  ¿Cómo podemos solucionar este problema? V t Se pulsa el botón Se suelta el botón +5V
  • 9.
    Sistemas Electrónicos Programables ComunicaciónSerie  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.
  • 10.
    Sistemas Electrónicos Programables ComunicaciónSerie (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.
  • 11.
    Sistemas Electrónicos Programables ComunicaciónSerie (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()
  • 12.
    Sistemas Electrónicos Programables ComunicaciónSerie (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’.
  • 13.
    Sistemas Electrónicos Programables EntradasAnaló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.
  • 14.
    Sistemas Electrónicos Programables EntradasAnaló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.
  • 15.
    Sistemas Electrónicos Programables EntradasAnalógicas (continuación…)  Ejercicio 5:  Leer el valor del potenciómetro conectado al pin A1 y enviar por puerto serie dicho valor en voltios.
  • 16.
    Sistemas Electrónicos Programables SalidaPWM  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 tSeñal 1 Señal 2
  • 17.
    Sistemas Electrónicos Programables SalidaPWM (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).
  • 18.
    Sistemas Electrónicos Programables SalidaPWM (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.
  • 19.
    Sistemas Electrónicos Programables Pormedio 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?
  • 20.
    Sistemas Electrónicos Programables Funcionesde 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)
  • 21.
    Sistemas Electrónicos Programables Funcionesde 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].
  • 22.
    Sistemas Electrónicos Programables LibreríaSoftwareSerial  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.
  • 23.
    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