Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tabla de contenido
PRACTICA 1: SEMÁFORO....................................................................................................................................1
PRÁCTICA 2: CONEXIONADO DE PULSADORES...................................................................................................3
PRÁCTICA 2.1. CONEXIONADO DE PULSADORES CIRCUITO SERIE..................................................................5
PRÁCTICA 2.2. CONEXIONADO DE PULSADORES CIRCUITO PARALELO..........................................................5
PRÁCTICA 3: ENCENDIDO SECUENCIAL DE LEDS. Instrucción for........................................................................6
PRÁCTICA 4: ENCENDIDO SECUENCIAL DE LEDS. Instrucción for y ARRAYS........................................................7
PRÁCTICA 4.1: Encender una secuencia de varios LEDs (Estrella fugaz).........................................................8
PRÁCTICA 5: COMUNICACIÓN PUERTO SERIE...................................................................................................10
PRACTICA 6. LECTURA DE UNA SEÑAL ANALÓGICA MEDIANTE UN POTENCIÓMETRO. INTRODUCCIÓN AL
PUERTO SERIE...................................................................................................................................................14
PRÁCTICA 7: DISPLAY 7 SEGMENTOS. LAS CONSTANTES..................................................................................17
PRÁCTICA 7.1: DISPLAY DE 7 SEGMENTOS CONTROLADO POR UN POTENCIÓMETRO. Función Mapear....20
PRÁCTICA 8: ENCENDIDO GRADUAL DE UN LED. SALIDAS PWM......................................................................22
8.1. MEDIANTE UNA SALIDA PWM, modulación por ancho de pulso (Pulse Width Modulation).................22
8.2. MEDIANTE UN POTENCIÓMETRO..........................................................................................................24
PRÁCTICA 9. CONTROL DE BRILLO DE UN LED RGB. EMPLEO DE LA FUNCIÓN MAPEAR map()........................26
PRÁCTICA 10: LAMPARA DE EFECTOS RGB.......................................................................................................28
PRÁCTICA 11: LDR O FOTORRESISTENCIAS (Light Dependent Resistor)............................................................29
11.1. LEER EL VALOR PROPORCIONADO POR UN LDR..................................................................................31
11.2. ENCENDER UN LED CUANDO EL NIVEL DE LUZ ES BAJO E INDICAR EN EL MONITOR SI ESTÁ
ENCENDIDO O APAGADO EL LED..................................................................................................................32
PRÁCTICA ___: Joystick.....................................................................................................................................33
PRÁCTICA ____. LECTURA DE LOS BOTONE DE UN JOSTICK Y CONTROL DEL ENCENDIDO Y APAGADO DE UN
LED............................................................................................................................................................... 33
PRÁCTICA _____: Sensor DHT11 para medir la temperatura y humedad con Arduino....................................34
Conexionado DHT11 sin PCB........................................................................................................................34
Conexionado DHT11 con PCB.......................................................................................................................34
LIBRERÍAS DE ARDUINO................................................................................................................................35
1
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
PRACTICA 1: SEMÁFORO
Vamos a realizar un semáforo que tenga la siguiente secuencia de luces: luz roja durante 6 segundos y se
apaga, luz verde durante 4 segundos y luz amarilla 2 segundos con dos destellos (dos intermitencias).
Material necesario
● 1 x Protoboard
● 1 x LED rojo
● 1 x LED amarillo
● 1 x LED verde
● 3 x resistencias de 220Ω
Esquema:
Sketch:
(una
opción
posible-
sencilla)
1
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
2
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Para conectar pulsadores en las entradas digitales de Arduino, se utiliza la conexión mediante resistencias
pull-down o pull-up (como veremos sólo cambia el circuito, el software que utilizamos para hacer funcionar
el circuito no va a variar), de tal forma, que siempre haya un estado lógico a la entrada del microprocesador,
es decir, 5 o 0 voltios.
No son unas resistencias especiales, se tratan de resistencias normales pero que están dispuestas en un
circuito de una manera determinada.
Como funcionalidad básica, estas resistencias establecen un estado lógico en un pin o entrada de un circuito
lógico cuando se encuentra en estado de reposo. Como bien indica su nombre la resistencia pull up
establece un estado HIGH y las resistencias pull down establecen un estado LOW cuando el pin se encuentra
en reposo. Esto evita los falsos estados que se producen por
el ruido generado por los circuitos electrónicos.
Las configuraciones se muestran en la siguiente figura:
Un pulsador va a tener cuatro patillas. Podemos recurrir a un
polímetro para comprobar las conexiones de continuidad o
bien fijarnos en su forma, tal y como se muestra en la siguiente
imagen:
Material necesario:
● Práctica anterior
● Pulsador
● Resistencia 10kΩ
Operadores de comparación en
sentencias if
Operadores booleanos if
3
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
4
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
5
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
a)
Modifica el programa anterior para que se apaguen todos los LED a la vez.
b) Modifica el sketch anterior para que los LED se apaguen en orden inverso: del pin 7 al 2.
6
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
int misEnteros[6]; //declara una matriz de 6 variables de tipo int, después en la finción setup() se asignarán los valores a cada
elemento de la matriz mediante la expresión: misEnteros[numero de orden]=valor.
float misSensores[5] = {2, 4, -8, 3.8, 2.1}; //declara una matriz de 5 variables tipo float
char mensaje [5] = {'h','o','l','a'}; //declara una matriz de 5 elementos tipo char
NOTA: Las matrices tipo char necesitan un carácter adicional para saber cuál es el fin de la matriz, esto debemos
tenerlo en cuenta para el tamaño de la matriz.
7
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
8
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
int pinArray[ ]={2,3,….}. Los corchetes indican que se está declarando un vector. Para
seleccionar una entrada específica del vector se usa pinArray[1] y dará como resultado 3.
Los vectores en el arduino IDE van desde 0 hasta n.
• Se declaran variables del tipo entero que definen el tiempo entre encender una luz y otra
(waitStart), el número de LEDs que se encienden simultáneamente (tailLength) y el
número de LEDs (lineSize). Las tres variables son del tipo int.
• En el segmento de void setup se declara que cada componente del vector pinArray es del
tipo OUTPUT . Esto se hace de forma compacta utilizando un lazo for que va desde 0
hasta que i sea menor ( lt ) al número de LEDs.
• En el segmento de void setup se indica que enciendan la cantidad de LEDs indicada en
tailLength, luego mediante una instrucción if se establece que a partir del LED tailLength
encienda el siguiente pero apague el último de la cola. Así sucesivamente hasta llegar al
final del número de LEDs
• Al terminar el desarrollo del programa se debe compilar para verificar si existen errores
dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta
Arduino para que lo ejecute.
NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción
se coloque punto y coma (;).
Práctica 13 Encender una secuencia de varios LEDs (Estrella fugaz) - MECABOT (mecabot-ula.org)
9
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Históricamente ambos tipos de puertos han convivido en los ordenadores, empleándose los puertos
paralelos en aquellas aplicaciones que requerían la transmisión de mayores volúmenes de datos. Sin
embargo, a medida que los procesadores se hicieron más rápidos los puertos de serie fueron desplazando
progresivamente a los puertos paralelos en la mayoría de aplicaciones.
Un ordenador convencional dispone de varios puertos de serie. Los más conocidos son el popular USB
(universal serial port) y el ya casi olvidado RS-232 (el de los antiguos ratones). Sin embargo, dentro del
ámbito de la informática y automatización existen una gran cantidad adicional de tipos de puertos serie,
como por ejemplo el RS-485, I2C, SPI, Serial Ata, Pcie Express, Ethernet o FireWire, entre otros.
En ocasiones veréis referirse a los puertos de serie como UART. La UART (universally asynchronous
receiver/transmitter) es una unidad que incorporan ciertos procesadores, encargada de realiza la conversión
de los datos a una secuencia de bits y transmitirlos o recibirlos a una velocidad determinada.
Por otro lado, también podéis oír el término TTL (transistor-transistor logic). Esto significa que la
comunicación se realiza mediante variaciones en la señal entre 0V y Vcc (donde Vcc suele ser 3.3V o 5V). Por
el contrario, otros sistemas de transmisión emplean variaciones de voltaje de -Vcc a +Vcc (por ejemplo, los
10
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
11
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
12
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
https://www.luisllamas.es/tag/puerto-serie/
13
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
El principio en el que se basa este funcionamiento es el del «divisor de tensión» o divisor de voltaje, que
podemos analizar observando la imagen. Podemos ver que si giramos la manivela del potenciómetro hacia el
punto «1» no habrá resistencia y todo el voltaje pasará a la pata central «2», por el contrario, si lo giramos
en sentido contrario hasta su tope lo conectaremos al punto «3» y la resistencia será la máxima y al punto
«2» le llegará 0 V o GND. El resto de las posiciones intermedias nos dará diferentes valores de resistencia y
diferentes valores de salida entre 0 y 5 V.
Para leer una señal analógica en Arduino, utilizaremos el comando analogRead(pin) que nos devolverá un
número entero entre 0 y 1023 (disponemos de una resolución de 10 bits, 2 10=1024 valores). Eso quiere decir
que, si por ejemplo introducimos una señal de 5 voltios en un pin, el uso de este comando o función nos
daría 1023, una tensión de cero voltios nos daría un 0, y una señal exacta de 2,5 voltios nos devolvería 512.
LA HERRAMIENTA “EL PUERTO SERIE”
El puerto serie es un canal de comunicación entre la tarjeta Arduino y nuestro ordenador que nos permitirá
realizar todo tipo de tareas de análisis y depuración de nuestros programas.
14
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
El puerto serie del Arduino Uno usa los pines 0(RX) y 1(TX). Estos pines no pueden ser utilizados mientras se
usa la comunicación serie.
Funcionamiento del circuito:
Conectamos los terminales extremos del potenciómetro a una tensión de 5V, el terminal intermedio variable
introducirá una tensión en el pin A0 de la tarjeta que dependerá de su posición física, según la posición en
que giremos la manecilla dicho conector se acercará más a 1 de sus extremos y se alejará del contrario,
variando así la resistencia parcial que existe entre cada par de pines.
La tensión de 5 V se repartirá entre ambas resistencias parciales, de modo proporcional a su valor, por lo que
la tensión entre el terminal intermedio, conectado a A0, y el terminal que está conectado a tierra, GND, irá
variando con dicho movimiento. El convertidor A/D de Arduino devolverá un valor discreto entre 0 y 1023,
proporcional a la tensión recibida.
Una vez compilado y volcado este código en el microcontrolador, buscaremos en la IDE de nuestro Arduino
el icono del puerto serie. este puerto nos permite comunicarnos con nuestra tarjeta Arduino mientras esté
conectada mediante un cable USB a nuestro ordenador. en realidad, el puerto serie como tal no existe en
nuestro ordenador, se emula a partir de nuestra conexión USB.
Los comandos nuevos que aparecen en estas líneas son aparte de analog Read(pin), los siguientes
● Serial.begin(9600): este comando se utiliza siempre en la función setup() para inicializar el puerto
serie, en caso de que queramos realizar algún tipo de comunicación entre el microcontrolador y
nuestra computadora. El número 9600 que aparece entre los paréntesis se refiere a la velocidad en
baudios bits por segundo a la que queremos establecer dicha conexión. Se puede modificar dicha
velocidad, usando múltiplos de 2, pero en realidad 9600 es lo bastante popular como para que de
momento lo utilicemos en los próximos ejercicios.
● Serial.println(valor): este comando imprime en la pantalla el parámetro que pongamos entre
paréntesis, sea cual sea su valor, sea de tipo string (cadena alfanumérica), char (carácter único), int,
float…. después de imprimirlo pasa a la línea siguiente. Existe otro comando Serial.print (valor) que
hace exactamente lo mismo, pero después no ejecuta un retorno de carro.
15
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
16
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Un display es un
componente capaz de mostrar
un número encendiendo y
apagando diferentes
segmentos para cada número.
Internamente está formado
por 7 ledes a los que se nombra
con las letras a, b, c, d, e, f y g.
● De cátodo (-) común. Todos los ledes tienen sus cátodos (-) unidos al pin COM, donde se conecta la
resistencia de protección, y esta a GND. Utiliza 7 cables para conectar los 7 ánodos (+) a 7 pines
diferentes de Arduino. Para encender un segmento se escribe: digitalWrite(pin,HIGH)
● De ánodo (+) común. Todos los ledes tienen sus ánodos (+) unidos al pin COM, donde se conecta la
resistencia de protección, y esta a +5V. Utiliza 7 cables para conectar los 7 cánodos (-) a 7 pines
diferentes de Arduino. Para encender un segmento se escribe: digitalWrite(pin,LOW)
En electrónica digital, el hecho de tener que escribir LOW en lugar de HIGH para encender un led se
denomina lógica inversa.
17
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
18
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
19
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
20
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
▪ El ciclo de trabajo describe la cantidad de tiempo que la señal está en un estado alto (encendido)
como un porcentaje del tiempo total que lleva completar un ciclo.
▪ La frecuencia es la rapidez con la que la modulación por ancho de pulsos completa un ciclo (es decir,
1000 Hz serían 1000 ciclos por segundo) y, por lo tanto, la rapidez con la que cambia entre los
Al encender y apagar una señal digital a una velocidad lo suficientemente rápida, y con un cierto ciclo de
trabajo, la salida parecerá comportarse como una señal de voltaje analógica constante al proporcionar
energía a los dispositivos.
En el caso de la placa Arduino UNO, los pines disponibles para el uso de PWM son los denominados digital
output D3, D5, D6, D9, D10 Y D11.
21
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Su rango de valores de salida es de 0 a 255 (a diferencia de las entradas analógicas cuyo rango de valores
oscila de 0 a 1023)
¿Cómo puedo controlar la modulación de ancho de pulsos PWM?
La función analogwrite(pin,valor) se usa para emitir una señal PWM. El número de pin utilizado para la
salida es alguno de los pines mencionados antes, D3, D5, D6, D9, D10 Y D11, válidos en la mayoría de las
placas Arduino.
Se puede usar para encender un LED con brillo variable o impulsar un motor a varias velocidades. Después
de una llamada a la función analogWrite (), el pin generará una onda cuadrada constante del ciclo de trabajo
especificado hasta la próxima llamada a analogWrite () o una llamada a digitalRead () o digitalWrite () en el
mismo pin.
Un número proporcional al ciclo de trabajo de la señal se numera como valor. Cuando valor es igual a cero,
la señal siempre está apagada. cuando valor es igual a 255 la señal siempre está activada.
La frecuencia de la señal PWM en la mayoría de los pines está prefijada, y es aproximadamente 490 Hz. En
la placa Arduino 1 y similares los pines D5 y D6 tienen una frecuencia de aproximadamente 980 Hz.
Prueba ahora tú a encender y apagar varios LEDs ……practicamos array
22
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
23
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
24
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
En este caso vamos a realizar el montaje de un diodo RGB, LED multicolor. El RGB tiene 4 terminales y su
conexión se muestra en la figura. Con dos pines se pueden obtener diversos colores, por ejemplo: Amarillo =
Rojo + Verde, Magenta= Rojo +Azul…podríamos sustituir los 3 LED del semáforo anterior por éste.
Los diodos de ánodo común encienden cada color poniendo un “0” lógico en el pin correspondiente.
Todos los colores se pueden obtener mediante una combinación de 3 colores básicos: R G B. Para codificar
un color en código binario se utilizan 3 números entre 0 y 255 que indican la cantidad de rojo, verde y azul
que lleva ese color:
Una curiosidad: aunque hasta ahora hemos utilizado resistencias del orden de 100-220Ω para proteger
nuestros diodos LED, en el caso del RGB el color rojo no se comporta igual que los otros dos colores, y por
eso hay que utilizar dos valores resistivos diferentes. Lo más común es utilizar 180Ω para el color rojo y 100Ω
para verde y azul. De todos modos, cualquier valor que no supere los 330Ω podría servir igualmente para
nuestros propósitos de aprendizaje.
La función map() de Arduino
La función map() de Arduino permite transformar un valor entero de un rango de entrada al valor
correspondiente a otro rango de salida.
Los 5 parámetros de entrada son valores enteros:
● valor de entrada
25
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
26
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
La función random() devuelve un número aleatorio entre 0 y el número indicado. Pero para conseguir
verdaderos valores aleatorios hay que introducir una “semilla” lo más impredecible posible. Esto lo podemos
hacer con la función randomSeed(), introduciendo como parámetro la lectura de un pin analógico al que no
haya nada conectado.
pinMode(A0, INPUT);
randomSeed(analogRead(A0));
//inicializa la función aleatoria
En el programa definimos una constante llamada “velocidad que indica en cuantos pasos se irá de un color a
otro. Por tanto, determina la velocidad de cambio de color. Definimos tres arrays para guardar:
● Los incrementos que hay que ir sumando para llegar al color objetivo.
27
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
28
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Otros módulos poseen cuatro terminales de salida, las mismas tres terminales anteriores y una salida AO
(Analog Output), donde obtenemos salidas de tensión análogas. Estos módulos son económicos y de fácil
adquisición.
29
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
En el segundo caso, la señal de salida Vout será igual a Vcc si incide luz, ya
que la resistencia será muy baja y se “conectará” a la alimentación, mientras
que, si no incide la luz, la señal será baja.
30
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Arduino lee cuántos voltios llegan por la entrada A0 y asigna un valor proporcional entre 0 y 1023; 0 cuando
lea 0V y 1023 cuando lea 5V.
Para convertir el valor asignado a los voltios leídos, tienes que multiplicar por la resolución:
Vref 5V
Resolución= = =0,00488 ≈ 0,005=5 mV
2
10
1024
31
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
32
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
33
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
34
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
35
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
Hay varias librerías que podemos utilizar para obtener la información de temperatura y humedad. En este
caso vamos a utilizar la que nos proporciona Adafruit. Esta librería es muy sencilla de utilizar y funciona para
los dos modelos, DHT11 con PCB y sin PCB.
LIBRERÍAS DE ARDUINO
Las librerías de Arduino son conjuntos de código preescrito que facilitan la programación de dispositivos y
periféricos específicos. Están diseñadas para simplificar tareas comunes y permitir a los usuarios
concentrarse en la lógica principal de sus programas. En el contexto del Arduino Uno, que es una placa de
desarrollo muy popular de Arduino, hay varias librerías disponibles.
36
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO
37