Apuntes - ARDUINO - Entradas y Salidas Digitales Guia Basica
Apuntes - ARDUINO - Entradas y Salidas Digitales Guia Basica
Apuntes - ARDUINO - Entradas y Salidas Digitales Guia Basica
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:
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.
DGG 2 de 30
Arduino
Nivel Pardillo
2. PROGRAMANDO ARDUINO
Todo programa para Arduino presenta una estructura básica:
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
Qué pines van a ser empleados como entrada y cuáles como salida.
Iremos viendo cuáles son estas funciones durante el desarrollo de estos apuntes.
DGG 4 de 30
Arduino
Nivel Pardillo
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
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:
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
}
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 :
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
Ampliación. ¿Cómo harías para que el rojo permaneciese encendido 3 s, el verde 2 s y el amarillo 0,3
s?
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.
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).
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.
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:
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.
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.
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);
//UNO
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
//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);
//CUATRO
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
//CINCO
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
//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);
//OCHO
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
//NUEVE
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
CODIGO BCD
DGG 16 de
Arduino
Nivel Pardillo
https://youtu.be/a4WGWgB6--k
DGG 17 de
Arduino
Nivel Pardillo
DGG 18 de