PROGRAMACIÓN ARDUINO
Transcript of 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.