Está en la página 1de 18

Arduino

Nivel Pardillo

Apuntes de
ARDUINO
Nivel Pardillo
Daniel Gallardo García
Profesor de Tecnología del IES Laguna de Tollón

DGG 1 de 30
Arduino
Nivel Pardillo

1. ¿QUÉ ES ARDUINO?
Arduino es una placa o tarjeta controladora, con una serie de entradas y salidas, y
que se programa a través del ordenador mediante un lenguaje de programación.
Veamos qué elementos componen una Arduino UNO:

Alimentación: Arduino puede estar alimentado por dos vías:


conexión USB (que proporciona 5 V).
jack de alimentación (que normalmente será una pila de 9 V o fuente de
alimentación, que se recomienda que esté entre 7 – 12 V).

Los pines de alimentación son para alimentar los circuitos la placa de prototipos o
breadboard o protoboard:
3.3 V proporciona una tensión de 3,3 V, y una intensidad máxima de 50 mA.
5 V proporciona una tensión de 5 V, y una intensidad máxima de 300 mA.
GND es la toma de tierra, o nivel 0 V de referencia.
Vin proporciona la tensión máxima con la que está alimentado Arduino.

Valores de entrada y de salida: en función de cómo esté siendo utilizado en pin,


tendremos:
Salida y entrada digital: los valores de salida pueden ser o 0 V (LOW) o 5 V
(HIGH), y se interpretará una entrada de entre 0 y 2 V como LOW y de entre
3 y 5 V como HIGH.
Salida analógica: los valores de salida van desde 0 V a 5 V en un rango de
0 a 255 (precisión de 8 bits) valores intermedios.
Entrada analógica: los valores de entrada van desde 0 V a 5 V en un rango
de 0 a 1023 (precisión de 10 bits) valores intermedios.
La intensidad máxima de todos estos pines es de 40 mA.

DGG 2 de 30
Arduino
Nivel Pardillo

Normalmente, todo el circuito electrónico que Arduino controlará se monta sobre


una placa de prototipos o breadboard, y el conexionado se realiza con cables tipo
jumper (es importante utilizar este tipo de cables porque no suelen romperse en los
zócalos):

2. PROGRAMANDO ARDUINO
Todo programa para Arduino presenta una estructura básica:

1ª parte int x=0; Declarar las variables.


2ª parte void setup() {…} Configuración de Arduino.
3ª parte void loop() {…} Comandos que regirán el
comportamiento de Arduino.

1ª parte: Declarar las variables int x=0;

Una variable es un valor que Arduino puede almacenar en su memoria, y que


posteriormente podrá ser utilizado o modificado.

Los tipos de variables más utilizados son:

int: almacena un número entero entre -32769 y 32767 (2 bytes).

long: almacena un número entero muy largo, entre -2147483648 y


2147483647 (4 bytes).

float: almacena un número decimal con un rango entre -3.4028235·1038 y


3.4028235·1038 (4 bytes).

const: especifica que la variable definida no podrá ser cambiada durante el


programa, siendo un siempre un valor constante:
const float pi=3.1415;

Es importante saber que es posible declarar una variable sin asignarle un valor
inicial, y hacerlo posteriormente durante el transcurso del programa:
int x;

x=4;

DGG 3 de 30
Arduino
Nivel Pardillo

Dominio de una variable: si declaro una variable al comienzo del programa, podré
emplear dicha variable en cualquier momento (dentro de cualquier función o bloque
de programa), pero si declaro una variable dentro de una función, sólo se podrá
utilizar en dicha función.

Poner nombre a las variables: Por último, una última consideración: a la hora de
poner un nombre a una variable es recomendable utilizar alguna palabra que nos
ayude a reconocer qué se está almacenando en ella, y en caso de utilizar dos o más
palabras se suele emplear la notación de joroba de camello (poner en mayúscula
la primera letra de las siguientes palabras). Ejemplos son:
ledPin estadoAnterior cuentaPulsaciones
miVariable lecturaSensor ledPinAzul

2ª parte: Configuración de Arduino void setup() {…}

En este bloque habrá que especificar:

Qué pines van a ser empleados como entrada y cuáles como salida.

pinMode(2,OUTPUT); //utilizaré el pin 2 como salida Digital.


pinMode(3,OUTPUT); //utilizaré el pin 3 como salida Digital o Analógica.
pinMode(8,INPUT); //utilizaré el pin 10 como entrada Digital.

Las entradas analógicas no hacen falta incluirlas en el setup, puesto que


esos pines (A0, A1, A2, A3, A4, A5) solo pueden ser entradas analógicas.

Si vamos a querer establecer una conexión con el ordenador.

Serial.begin(9600); /*hay que especificar los baudios (bits por


segundo) a la que va a realizarse dicha
comunicación Arduino-PC */

Si vamos a querer utilizar número aleatorios.

randomSeed(0); //se inicia la generación de número aleatorios.

3ª parte: Comandos que regirán el comportamiento de Arduino


void loop () {…}

En este bloque se deberá escribir todas aquellas instrucciones, órdenes, primitivas,


comandos o funciones necesarias para que Arduino funcione según nuestro deseo.
Realmente, este bloque constituye un bucle infinito, ya que Arduino, mientras esté
alimentada con energía, funcionará haciendo el programa loop una y otra vez.

Iremos viendo cuáles son estas funciones durante el desarrollo de estos apuntes.

DGG 4 de 30
Arduino
Nivel Pardillo

SALIDAS DIGITALES digitalWrite(4,HIGH);

Podemos indicar a Arduino que en un pin determinado coloque un “0” o un “1” lógico
(que serán 0 V o 5 V) mediante los siguientes comandos, respectivamente:

digitalWrite(12,LOW); digitalWrite(12,HIGH);

Parpadeo de un LED

Conectaremos un diodo LED en el pin 3. Siempre que conectemos un LED a una


salida de Arduino debemos hacerlo en serie con una resistencia de valor
comprendido entre 100 y 1K para evitar que una intensidad demasiado elevada
destruya dicho LED:

El programa que utilizaremos será el siguiente:

Vemos que ha aparecido una nueva instrucción: delay (milisegundos);

delay(1000); //realiza una pausa en el programa de 1000 ms

DGG 5 de 30
Arduino
Nivel Pardillo
Es muy cómodo utilizar variables para luego modificar rápidamente los parámetros
del programa, como por ejemplo el tiempo de espera o el pin donde conecto el LED:

int pinLed=3; //conectaré el LED en el pin 3


int t=1000; //t será el tiempo de espera

void setup() {
pinMode(pinLed,OUTPUT); /*configuro el pin 3
como pin de salida */
}

void loop() {
digitalWrite(pinLed,HIGH); //enciendo el LED
delay(t); //espero un segundo
digitalWrite(pinLed,LOW); //apago el LED
delay(t); //espero otro
segundo
}

Asimismo, es muy útil emplear comentarios dentro de un programa, que facilitan


mucho su lectura y comprensión. A la hora de escribir comentarios podemos
emplear dos opciones:
// … permite escribir un comentario en una línea de código.
/* … */ permite escribir un comentario en varias líneas de código.

Mas ejercicios con led:

Secuencia de leds.

Se trata de encender y apagar 4 leds secuencialmente. Los leds deben estar conectados a los pines
5,6,7 y 8. Se deben encender y posteriormente apagar los leds desde el pin 5 al 8, con un tiempo de
duración de encendido y apagado de 200 milisegundos.

DGG 6 de 30
Arduino
Nivel Pardillo

Solución :

int tiempo=200; //declara una variable como entero y de valor 200

void setup() { //comienza la


configuracion
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}

void loop() { //comienza el bucle principal del


programa digitalWrite(5,HIGH);
delay(tiempo);
digitalWrite(5,LOW);
delay(tiempo);
digitalWrite(6,HIGH);
delay(tiempo);
digitalWrite(6,LOW);
delay(tiempo);
digitalWrite(7,HIGH);
delay(tiempo);

DGG 7 de 30
Arduino
Nivel Pardillo
digitalWrite(7,LOW); delay(tiempo); digitalWrite(8,HIGH); delay(tiempo); digitalWrite(8,LOW);
delay(tiempo);
}

El semáforo

Materiales. 1 led rojo, 1 led amarillo, 1 led verde y 3 resistencias de 220 Ω (rojo-rojo-marrón).

Explicación. Debemos conseguir que los tres leds se enciendan en bucle alternativamente, como si de
un semáforo se tratase, según esta secuencia: rojo (2 s), verde (2 s), amarillo (0,5 s). Para ello,
conectaremos el ánodo del led rojo al pin 13, el ánodo del led amarillo al pin 11 y el ánodo del led
verde al pin 9

Esquemas eléctricos

Sketch

const int rojo=13; //el ánodo del led rojo irá al pin 13
const int amarillo=11; //el ánodo del led amarillo irá al pin 11
const int verde=9; //el ánodo del led verde irá al pin 9

void setup() //el pin al que va el ánodo del rojo es de salida


{ pinMode(rojo,OUTPUT);
pinMode(amarillo,OUTPUT); //el pin al que va el ánodo del amar es de salida
pinMode(verde,OUTPUT); //el pin al que va el ánodo del verde es de salida
digitalWrite(rojo,LOW); //apagamos el led rojo por si estuviera encendido
digitalWrite(amarillo,LOW); //apagamos el led amar por si estuviera encendido
digitalWrite(verde,LOW); //apagamos el led verde por si estuviera encendido
}
void loop()
{ digitalWrite(rojo,HIGH); //encendemos el led rojo...
DGG
delay(2000); //durante 2 s... 8 de 30
digitalWrite(rojo,LOW); //y lo apagamos
Arduino
Nivel Pardillo
digitalWrite(verde,HIGH); //encendemos el led verde...
delay(2000); //durante 2 s...
digitalWrite(verde, LOW); //y lo apagamos
digitalWrite(amarillo,HIGH); //encendemos el led amarillo...
delay(500); //durante 0,5 s...
digitalWrite(amarillo,LOW); //y lo apagamos
}

Ampliación. ¿Cómo harías para que el rojo permaneciese encendido 3 s, el verde 2 s y el amarillo 0,3
s?

USO DEL CD 4511 CMOS BCD-to-7-Segment Latch Decoder Drivers

El visualizador de siete segmentos (llamado también display por calco del inglés) es una forma de representar
caracteres en equipos electrónicos. Está compuesto de siete segmentos que se pueden encender o apagar
individualmente. Cada segmento tiene la forma de una pequeña línea. Se podría comparar a escribir números
con cerillas o fósforos de madera.

El visualizador de 7 segmentos es un componente que se utiliza para la representación de caracteres


(normalmente números) en muchos dispositivos electrónicos, debido en gran medida a su simplicidad. Aunque
externamente su forma difiere considerablemente de un led típico, internamente están constituidos por una
serie de leds con unas determinadas conexiones internas, estratégicamente ubicados de tal forma que forme un
número '8'.

Segmentos e identificación de los mismos.


DGG 9 de 30
Arduino
Nivel Pardillo
Cada uno de los segmentos que forman la pantalla están marcados con siete primeras letras del alfabeto ('a'-'g'),
y se montan de forma que permiten activar cada segmento por separado, consiguiendo formar cualquier dígito
numérico. A continuación se muestran algunos ejemplos:

 Si se activan o encienden todos los segmentos se forma el número "8".

 Si se activan sólo los segmentos: "a, b, c, d, e, f," se forma el número "0".

 Si se activan sólo los segmentos: "a, b, g, e, d," se forma el número "2".

 Si se activan sólo los segmentos: "b, c, f, g," se forma el número "4".

En algunos casos aparece un octavo segmento denominado dp. (del inglés decimal point, punto decimal).

Los ledes trabajan a baja tensión y con pequeña potencia, por tanto, podrán excitarse directamente con puertas
lógicas. Normalmente se utiliza un codificador (en nuestro caso decimal/BCD) que activando una sola pata de la
entrada del codificador, activa las salidas correspondientes mostrando el número deseado. Recordar también
que existen pantallas alfanuméricas de 16 segmentos e incluso de una matriz de 7*5 (35 bits).

Los hay de dos tipos: ánodo común y cátodo común.

En los de tipo de ánodo común, todos los ánodos de los ledes o segmentos están unidos internamente a una
patilla común que debe ser conectada a potencial positivo (nivel “1”). El encendido de cada segmento individual
se realiza aplicando potencial negativo (nivel “0”) por la patilla correspondiente a través de una resistencia que
limite el paso de la corriente.

En los de tipo de cátodo común, todos los cátodos de los ledes o segmentos están unidos internamente a una
patilla común que debe ser conectada a potencial negativo (nivel “0”). El encendido de cada segmento
individual se realiza aplicando potencial positivo (nivel “1”) por la patilla correspondiente a través de una
resistencia que limite el paso de la corriente.

Los segmentos pueden ser de diversos colores, aunque el visualizador más comúnmente utilizado es el de color
rojo, por su facilidad de visualización.

También existen pantallas alfanuméricas de 14 segmentos que permiten representar tanto letras como
números. El visualizador de 14 segmentos tuvo éxito reducido y solo existe de forma marginal debido a la
competencia de la matriz de 5 x 7 puntos.

Si bien hoy este tipo de visualizadores parecen antiguos u obsoletos, ya que en la actualidad es muy común el
uso de pantallas gráficas basadas en píxeles, el visualizador de 7 segmentos sigue siendo una excelente opción
en ciertas situaciones en las que se requiera mayor poder lumínico y trabajo en áreas hostiles, donde las
pantallas de píxeles podrían verse afectadas por condiciones ambientales adversas. Aún no se ha creado otro
dispositivo de señalización que reúna características como este en cuanto a potencia lumínica, visualización a
distancia, facilidad de implementación, bajo costo y robustez.

Control a través de circuitos integrados

Para controlar un visualizador de siete segmentos normalmente se emplean circuitos integrados especialmente
diseñados para este fin y que simplifican mucho el diseño del circuito. Un ejemplo de ellos es el circuito
integrado 74LS47; con este circuito integrado podemos formar los números del 0 al 9 según conectemos las
cuatro patas principales al polo positivo o negativo de nuestra fuente de alimentación. Para saber el código para

DGG 10 de
Arduino
Nivel Pardillo
formar los diferentes números debemos descargar la hoja de datos desde internet. Existen otros circuitos para
poder controlarlos, por ejemplo: el circuito integrado CD4511.

Funcionamiento CD4511

El CD4511 es un decodificador bcd de 4 bits para display cátodo común, que utiliza tecnología cmos. Recibe en
los Pines de entrada a ABCD los datos en código binario y los decodifica a código decimal, siendo posible su
exhibición en los display de 7 segmentos.

El Funcionamiento del cd4511 puede ser visualizado a través de su tabla de verdad. Solo se muestra la
decodificación BCD:

Tabla de la verdad CD4511

Pines BCD Salida a Display Digito

ABCD abcdefg

0000 1111110 0

0001 0110000 1

0010 1101101 2

0011 1111001 3

0100 0111011 4

0101 1011011 5

0110 0011111 6

0111 1110000 7

1000 1111111 8

1001 1110011 9

Para realizar un proyecto electrónico utilizando el CD4511 es necesario conocer sus características físicas y
limitaciones de uso que están disponibles por sus fabricantes a través de sus respectivas hojas de datos.

Las características más importantes que podemos considerar se encuentran:

 Tensión de operación: 3V a 18V de corriente continua.

 Corriente de salida: 10mA.

 Temperatura de operación: -55ºC a 125ºC.

 Configuración de pines.
DGG 11 de
Arduino
Nivel Pardillo
Cada pin de salida corresponde a un segmento del display, basta con hacer las conexiones y enviar las
informaciones binarias a las entradas, luego CD4511 decodifica el código bcd y escribe la información en cifras
decimales en el display.

Este Circuito integrado es especifico para trabajar con diplay de 7 segmentos de cátodo comuún, en el caso de
querer usar el CD 4511 con ánodo común se debe recurrir a un circuito inversor o usar otro circuito integrador
decodificador.

Tenemos a disposición 3 Pines del CD4511 que pueden tener gran aplicación en diversos proyectos, brindando
funciones como:

 Economizar Batería.

 Registrar el ultimo dígito exhibido en el display.

 Testear los segmentos del display, para validar su funcionamiento y el cableado.

Estos pines y su funcionamiento son:

 Lamp Test LT(Pin 3): Este pin nos sirve para probar todos los segmentos. Debido a que es una entrada
inversora, para tener un funcionamiento normalizado esta entrada debe estar en 1. Cuando la entrada
toma un valor lógico 0 prende todos los segmentos del display para testear el funcionamiento.

 Blank Input BI(Pin 4): Apaga todos los segmentos, tenér en cuenta que esto es una entrada inversora,
por lo tanto para tener un funcionamiento normal del CI esta entrada precisa estar en 1.

 Lath Enable LE(Pin 5): congela el último dígito exhibido en el display 7 segmentos después de recibir un
1 lógico. Para obtener un funcionamiento normal del CD4511 esta entrada precisa estar en 0.

DGG 12 de
Arduino
Nivel Pardillo

void setup()

DGG 13 de
Arduino
Nivel Pardillo
{

pinMode(0, OUTPUT);

pinMode(1, OUTPUT);

pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

void loop()

//CERO

digitalWrite(0, LOW);

digitalWrite(1, LOW);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//UNO

digitalWrite(0, HIGH);

digitalWrite(1, LOW);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//DOS

digitalWrite(0, LOW);

digitalWrite(1, HIGH);

digitalWrite(2, LOW);

digitalWrite(3, LOW);
DGG 14 de
Arduino
Nivel Pardillo
delay(1000); // Wait for 1000 millisecond(s)

//TRES

digitalWrite(0, HIGH);

digitalWrite(1, HIGH);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//CUATRO

digitalWrite(0, LOW);

digitalWrite(1, LOW);

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//CINCO

digitalWrite(0, HIGH);

digitalWrite(1, LOW);

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//SEIS

digitalWrite(0, LOW);

digitalWrite(1, HIGH);

digitalWrite(2, HIGH);

digitalWrite(3, LOW);
DGG 15 de
Arduino
Nivel Pardillo
delay(1000); // Wait for 1000 millisecond(s)

//SIETE

digitalWrite(0, HIGH);

digitalWrite(1, HIGH);

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

delay(1000); // Wait for 1000 millisecond(s)

//OCHO

digitalWrite(0, LOW);

digitalWrite(1, LOW);

digitalWrite(2, LOW);

digitalWrite(3, HIGH);

delay(1000); // Wait for 1000 millisecond(s)

//NUEVE

digitalWrite(0, HIGH);

digitalWrite(1, LOW);

digitalWrite(2, LOW);

digitalWrite(3, HIGH);

delay(1000); // Wait for 1000 millisecond(s)

CODIGO BCD
DGG 16 de
Arduino
Nivel Pardillo

Realizar el siguiente ejercicio en TINKERCAD: Les dejo un video de ejemplo.

https://youtu.be/a4WGWgB6--k

DGG 17 de
Arduino
Nivel Pardillo

DGG 18 de

También podría gustarte