PROGRAMACIÓN ARDUINO

17
PROGRAMACIÓN ARDUINO

Transcript of PROGRAMACIÓN ARDUINO

PROGRAMACIÓN ARDUINO

INTRODUCCIÓN

¿Qué es Arduino?

Arduino es una plataforma de SW y HW libre, basada en:

• Una placa con un microcontrolador

• Un entorno de desarrollo

Todo esto con el fin de facilitar el uso de la electrónica en proyectos de diversas disciplinas.

¿Cómo se programa Arduino?

Con ayuda de la IDE de Arduino.

• Usa el lenguaje Processing Orientado a objetos

• Las rutinas escritas se denominan “sketchs”

• Existe una amplia lista de bibliotecas y ejemplos

ARDUINO – HARDWARE

Placas de circuito con Microcontrolador

• Mayormente con un microcontrolador (μC) ATMEL • Bajo Costo (Cuando se desarrolló por primera vez)

• Actualmente hay un modelo que usa un μC ARM (Arduino DUE)

• El modelo que usaremos es el llamado “Arduino UNO”

Características Técnicas

Microcontrolador

• ATmega328 (8 bits).

Voltaje de entrada (PLUG):

• 7-12V (recomendado) • 6-20V (limite)

Voltaje de operación

• 5V (Existe un pin con 3.3V)

Pines:

• Entrada/Salida digital: 14 (6 configurables como PWM) • Entradas Analógicas: 6 (ADC de 10 bits de resolución)

Corriente máxima

• Por Pin I/O : 40 mA • En el pin 3.3V: 50 mA

Memoria:

• Flash: 32 KB (Memoria de programa) • SRAM: 2 KB (Memoria de datos y/o registros, volátil) • EEPROM: 1 KB (Memoria de datos, no volátil)

Velocidad Reloj

• 16 MHz

Extensiones

Existe una gran variedad de Shields o extensiones Comunicaciones:

• Placa Bluetooth • Zigbee • Ethernet • Wifi • RS 232

Sensores: • Luz • Temperatura/humedad • Movimiento • Sonido/ultrasonido, IR...

Actuadores: • control de motores DC, Stepper, servos... Pantallas...

Programación Arduino

• Funciones principales de Arduino:

• void setup()

• Define las condiciones iniciales del microcontrolador.

• Especificar pines a utilizar y con qué fin (Entrada o Salida).

• Inicializar variables

• Inicializar comunicaciones (Serial, SPI, I2C)

• Inicializar módulos (Display LCD, sensores, etc)

• Esta rutina se ejecuta UNA SOLA VEZ, al iniciar el programa

• void loop()

• Equivalente al main del lenguaje C o Java

• Aquí se escriben las rutinas a ejecutar

• Esta rutina se ejecuta cíclicamente (una y otra vez)

Tipos de Datos • Boolean

• 1 bit • Valores: TRUE (1), FALSE (0)

• Byte • Valor numérico de 8 bits • Rango: 0 a 255

• Int • Número entero de 16 bits • Rango: ± 32.768

• Long • Número entero de 32 bits • Rango: ±2.147.483.647

• Float/Double • Numero real de 32 bits • Rango: ±3,4028235E+38

• Char • caracter de 8 bits

CONSTANTES

• INPUT: Entrada

• OUTPUT: Salida

• HIGH: Valor digital alto (5 v)

• LOW: Valor digital bajo (0 v)

• TRUE: Verdadero

• FALSE: Falso

Funciones

Funciones I/O Digitales:

• pinMode(PIN,MODO)

• digitalWrite(PIN,VALOR)

• digitalRead(PIN)

Funciones I/O Analógicas

• analogRead(PIN)

• analogWrite(PIN,VALOR)

Funciones de Tiempo

• delay(VALOR)

• delayMicroseconds(VALOR)

• millis()

Funciones I/O Digitales

pinMode(PIN , MODO): • Sirve para definir si el pin va a ser utilizado como entrada o salida • PIN: valor entero del 0 al 13 • MODO:

• INPUT para definir Entrada • OUTPUT para salida.

Esta “función” se usa dentro de la rutina setup • Ya que no podemos usar un pin sino hasta que lo configuremos como

de entrada o de salida. • Los pines por defecto vienen configurados como entradas

Ejemplo: int led = 13; void setup() { pinMode(led,OUTPUT); }

Funciones I/O Digitales

digitalWrite(PIN , VALOR): • Se utiliza para escribir un valor lógico en un pin • PIN: Número entero del 0 al 13 • VALOR:

• HIGH para escribir un 1 lógico (5V) • LOW para escribir un 0 lógico (0V)

Ejemplo: int Led = 13; --- if (alarma==true) { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); }

Funciones I/O Digitales

digitalRead(PIN): • Devuelve un valor lógico leído desde el pin especificado • PIN: Número entero del 0 al 13 • Devuelve:

• HIGH en caso de 5 V. • LOW en caso de 0 V.

Ejemplo: int Led = 13; int Alarma = 12; int val = 0; --- val = digitalRead(Alarma); if (val) { digitalWrite(Led,HIGH); } else { digitalWrite(Led,LOW); }

Funciones I/O Analógicas

analogRead(PIN): • Función para leer el valor analógicos del pin especificado. • PIN: Numero entero del 0 al 5 • Devuelve:

• Número del 0 al 1023

Ejemplo: Int analogPin = 0;

Int digitalPin = 13;

void loop(){

int valor = analogRead(analogPin);

if(valor > 250)

{

digitalWrite(digitalPin, HIGH);

}

else

{

digitalWrite(digitalPin, LOW);

}

}

Funciones I/O Analógicas

analogWrite(PIN , VALOR):

• Función para escribir el PIN con un tren de pulsos con un ancho especificado.

• PIN: Numero entero del 0 al 5

• VALOR:

• Número del 0 al 255

• Representa el ciclo de trabajo

• (Duty Cycle)

Funciones I/O Analógicas

Ejemplo: int ledPin = 9; // LED conectado al pin digital 9

int analogPin = 3; // potenciómetro conectado al pin 3

int val = 0; // variable en el que se almacena el dato leído

void setup()

{

pinMode(ledPin, OUTPUT); // pin 5 configurado como salida

}

void loop()

{

val = analogRead(analogPin); // lee la tensión en el pin

analogWrite(ledPin, val / 4);

}

OJO: los valores de analogRead van desde 0 a 1023 , mientras que los valores

de analogWrite values van desde 0 a 255, por eso se ajusta el ciclo de trabajo

a el valor leído dividido por 4.

Funciones de Tiempo

delay(VALOR)

• Pausa el programa por un tiempo determinado (en milisegundos) especificado por VALOR.

• VALOR: entero entre 0 y 1000

ADVERTENCIA

El uso de delay() en un sketch tiene problemas importantes cuando se usa en aplicaciones más complejas:

• Sólo las tareas basadas en interrupciones seguirán funcionando.

• Es decir, mientras ejecuta delay, no se pueden realizar otras tareas.

• Por este motivo es preferible usar millis() para controlar tiempo.

CONSEJO: Salvo en programas sencillos, evitar usar delay para pausas mayores a 100ms

Funciones de Tiempo

delayMicroseconds(VALOR) • Detiene brevemente el programa por la cantidad de microsegundos

especificados por VALOR.

• Esta función trabaja de manera exacta en el rango de 3 microsegundos y valores superiores.

• Actualmente, el valor más grande producirá un retraso exacto de 16383

• No deshabilita las interrupciones

millis()

• Devuelve el tiempo en milisegundos transcurridos desde que se arranco la placa Arduino con el programa actual.

• Este número se desbordará (volverá a cero), después de alrededor de 50 días.