Arduino basico
¿Qué es un microcontrolador?
• Arduino está creado con un único objetivo:
facilitarnos la programación de un
microcontrolador.
• Es un circuito integrado programable, capaz
de ejecutar las órdenes que están
almacenadas en su memoria. Ojo a esto,
circuito integrado programable. Esto quiere
decir que lo podemos programar.
¿Qué es un microcontrolador?
Puerto USB
Se llama puerto USB pero realmente estamos
trabajando a través del puerto serie. Dentro de la
propia placa hay un conversor de USB a serie,
también conocido como TTL o FTDI.
Pines de Arduino UNO
Pines digitales
Es el zócalo más grande. Tiene 14 pines numerados
del 0 al 13.
Pines digitales
En Arduino en estos pines solo
podemos tener dos estados HIGH
o LOW que equivalen a 5V y 0V.
Los pines digitales pueden funcionar
en 3 modos diferentes:
.Modo entrada (INPUT): puede leer voltajes. Por
ejemplo, ¿está pulsado un botón? si (HIGH) o no
(LOW).
.Modo salida (OUTPUT): puede suministrar un
voltaje. Por ejemplo, encender/apagar un led on
(HIGH) o off (LOW).
.Excepción (PWM): algunos pines del
microcontrolador pueden funcionar en modo salida
suministrando un valor entre el rango 0V y 5V. Esto
ya no sería un pin digital. Estos pines van marcados
con el símbolo ~ y hay 6 dentro de la placa de
Arduino (3, 5, 6, 9, 10, 11).
Los pines digitales pueden funcionar
en 3 modos diferentes:
Por último señalar que los pines 0 y 1 son Rx (recibir) y
Tx (transmitir). Se utilizan para la comunicación serie
entre el ordenador y Arduino y están conectados a los
LEDs de la placa donde pone RX y TX. Se recomienda
no utilizar estos pines.
Pines analógicos
Es el zócalo ANALOG IN y van numerados del A0 al
A5, 6 pines en total.
Pines analógicos
El ADC que viene integrado dentro de la MCU que
lleva Arduino UNO tiene una resolución de 10-
bit. Esto equivale a que solo vamos a poder medir
1024 valores posibles que van del 0 al 1023.
Básicamente lo que estamos haciendo es dividir el
rango de 0V a 5V en 1024 partes.
Pines analógicos
Pines de alimentación
El zócalo de pines de alimentación nos sirve para
alimentar los componentes, sensores y
actuadores.
Hay que destacar 4 de todos los que hay:
3,3V: suministra ese voltaje por ese pin.
5V: suministra ese voltaje por ese pin.
GND: hay dos pines con esta función además del
que está en el zócalo de los pines digitales.
Pines de alimentación
El pin Vin nos da otra alternativa a la hora de
alimentar Arduino con un voltaje de entre 6V y
12V.
Inicialización de variables
Variable:
• Es un espacio en memoria para guardar dato.
• Tiene asociado un nombre, un tipo y un valor.
• Tiene un valor por defecto, llamado null (0).
Inicialización de variables
Inicilizar una variable no es más que asignar un
valor.
Veamos dos formas de inicializar una variable:
En sentencias separadas:
int nivelMaximo;
nivelMaximo = 25;
en la misma línea o sentencia:
int nivelMaximo = 25;
Inicialización de variables
Tipos de datos en Arduino
Para aprender Arduino tenemos que conocer el
lenguaje en el que se programa. Vamos a ver los
7 tipos de datos más importantes de C++, pero
no son los únicos.
Entero (int)
Es el tipo de dato más común. En C++ se utiliza la
palabra reservada int para declarar un tipo de
dato entero.
Ejemplo: int variableEntera = 32;
Entero (int)
Puede almacenar un número de 16-bit es decir, 2
bytes (16 unos en binario 1111111111111111).
En total son 65.535 números pero como
almacena números positivos y negativos el rango
de un int es de -32.768 a 32.767.
Entero sin signo (unsigned int)
¿Qué ocurre si sabemos que sólo vamos a trabajar con
números enteros positivos? En este caso podemos
utilizar los enteros sin signo. La palabra reservada en
C++ para este tipo de datos es unsigned int.
Ejemplo:
unsigned int variableEnteraSinSigno = 40000;
Entero sin signo (unsigned int)
Utiliza la misma memoria que una variable int, 2 bytes
(16-bit). Lo único que sólo utiliza la parte entera es
decir su rango es de 0 a 65.535.
Entero largo (long)
Si aún así necesitas almacenar números más
grandes, también puedes utilizar el entero largo.
En C++ la palabra reservada para este tipo de
dato es: long.
Ejemplo:
long milisegundos = 90000;
Entero largo (long)
Puede almacenar números de 4 bytes (32-bit). El
rango de valores es de -[Link] a
[Link]. Puede almacenar números
positivos y negativos. Sin embargo puedes utilizar
la palabra reservada unsigned long para
almacenar solo números positivos.
Decimal (float)
Si quieres almacenar un número decimal con los
tipos de datos que hemos visto hasta ahora no
podrías. Para los números con decimales
tenemos los números de coma flotante. En C++
se utiliza la palabra reservada float.
Ejemplo:
float variableDecimal = 3.141516
Decimal (float)
Con este tipo de datos podemos almacenar
valores realmente grandes. El rango es de
3.4028235 x 1038 hasta -3.4028235 x 1038 . Eso
sí, solo utiliza 4 bytes de memoria (32-bit).
Byte (byte)
Es el tipo de dato más pequeño que hemos visto
hasta ahora. En C++ se utiliza la palabra reservada
byte y como indica su nombre, solo ocupa 1 byte
de memoria.
Ejemplo:
byte miByte = 88;
byte miOtroByte = B1011000;
Byte (byte)
El rango de valores que puede almacenar es de 0
a 255 sin signo. Se puede asignar valores de
diferentes maneras. La más típica es un valor en
el sistema decimal pero podemos también
asignar un valor en binario.
Esto último lo hacemos utilizando el formateador
B. Indica que después de esta letra viene un
número en sistema binario.
Texto (String)
Es una variable usada para almacenar texto.
Ejemplo:
String frase = "HOLA MUNDO";
Llamar una funcion.
Es muy sencillo, sólo tienes que poner el nombre
de la función y abrir y cerrar un paréntesis. En
ocasiones, dentro de los paréntesis van los
parámetros. Al final del todo el punto y coma.
Ejemplo:
digitalWrite(3, HIGH);
Llamar una funcion.
digitalWrite(3, HIGH);
La función digitalWrite nos permite sacar 5V o 0V
por un pin. Para hacer esto tenemos que pasar la
información del estado (HIGH serían 5V y LOW
sería 0V) además del pin sobre el que queremos
trabajar.
Los parámetros de una función
Algunas funciones requieren de parámetros
como hemos visto en el ejemplo anterior. Por
ejemplo, la función digitalWrite necesita saber
dos cosas: el número de pin y el estado (HIGH o
LOW).
Los parámetros de una función
pinMode( )
Configura el pin especificado para que se
comporte como una entrada (INPUT) o una salida
(OUTPUT).
Ejemplo:
pinMode(13, OUTPUT);
Los parámetros de una función
digitalRead( )
Lee el valor desde un especifico pin digital el cual
puede ser Alto (HIGH) o Bajo (LOW).
Syntaxis: digitalRead(pin);
Ejemplo:
digitalRead (13);
Funciones de interface analógica
Arduino cuenta con dos funcionalidades
analógicas:
1. leer una entrada analogica, ADC
2. Generar una salida Pseudo-analogica.
Funciones de interface analógica
analogWrite ( pin, valor );
Pin: Numero del pin a utilizar (solo los pines
PWM).
Valor: valor digital entre 0 y 255 que controla el
ciclo de trabajo de la PWM.
Funciones de interface analógica
analogRead ( pin );
Pin: numero de entrada analogica a usar
normalmente entre 0 a 5.
Retorno: entero entre 0 y 1023, corresponde al
valor digitalizado de la entrada analógica. La
conversión demora 100 microsegundos, por lo
que la taza de la lectura esta limitada a 10Khz.
Condicional if, else
El comando if:
Permite establecer una condición para ejecutar
una porción de código.
Si la Condicion_booleana tiene valor TRUE,
entonces ejecuta el codigo. Si es FALSE, entonces
sigue de largo.
If(condicion_booleana){
Ejecutar codigo;
}
Condicional if, else
Comando: Else
Permite incluir una sección de código para el caso
en que NO se cumple la condición del comando
IF.
If(condicion_booleana){
Ejecutar codigo1;
}
Else{
Ejecutar codigo2;
}
Loop: For y While
Son loops que se pueden controlar.
• Ejecutar un numero definido de vueltas
• Ejecutar según una condición.
Loop While: se repetirá indefinidamente mientras
la condición impuesta sea cierta.
While (condición){
Código;
}
Loop: For y While
Loop For: Permite ejecutar una seccion de codigo
un numero definido de veces según una regla
establecida.
For (inicialización ; condición ; incremento){
Código;
}
Loop For utiliza una variable, que se define o
inicializa al iniciar el primer ciclo.
For (int K=0; condición ; incremento){
Código;
}