Está en la página 1de 38

IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

CONTROL Y ROBÓTICA 3º ESO


PRÁCTICAS ARDUINO UNO

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

● SALIDAS DIGITALES: digitalWrite()

● ESPERA EN ms: delay(ms)

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

● 1x Arduino UNO R3 o Genuino y cable de conexión al PC

● 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

PRÁCTICA 2: CONEXIONADO DE PULSADORES

● ENTRADA DIGITAL. PULL DOWN Y PULL UP. digitalRead()

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:

Ahora vamos a realizar un montaje con resistencia Pull-up y


pull-down para analizar su funcionamiento.

Material necesario:

● Práctica anterior

● Pulsador

● Resistencia 10kΩ

Las sentencias condicionales if

Sintaxis de la sentencia if:

Operadores de comparación en
sentencias if

Operadores booleanos if

3
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

2.1. ESQUEMA PULL_DOWN

2.2. ESQUEMA PULL_UP

4
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA 2.1. CONEXIONADO DE PULSADORES CIRCUITO SERIE


Estos dos interruptores están en serie, esto quiere
decir que entre ellos fluye la misma corriente eléctrica,
así que ambos tienen que estar apretados para que el
LED se encienda.

PRÁCTICA 2.2. CONEXIONADO DE PULSADORES CIRCUITO


PARALELO
Estos dos interruptores están en paralelo, esto quiere
decir que la corriente eléctrica está repartida entre
ellos. Si se pulsa cualquiera de ellos se encenderá el
LED.

5
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA 3: ENCENDIDO SECUENCIAL DE LEDS. Instrucción for


Realiza el encendido secuencial de seis leds empezando del pin 2
hasta el pin 7. Cuando se hayan encendido todos los LEDs se
apagan los 6 y se volverá a repetir el ciclo. Vamos a considerar
un tiempo entre el encendido de cada LED y el apagado de los 6
LEDS de 500ms.
Función for()
La función for() se usa para repetir un bloque de estados
encerrados entre llaves. Generalmente se utiliza un contador para incrementar y terminar el bucle. Esta
función es útil para cualquier operación repetitiva, y se usa a menudo en combinación con arrays para
operar en los datos/pines. Se usa de la siguiente manera:
for (inicialización; condición; incremento) {
// declaración (s);
}

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

PRÁCTICA 4: ENCENDIDO SECUENCIAL DE LEDS. Instrucción for y


ARRAYS
¿Qué es una matriz o array en Arduino?
Una matriz (array) es una colección de variables que tienen todas el mismo y único nombre, pero que
pueden distinguirse entre sí por un número de índice o posición. Es decir, en vez de tener diferentes
variables cada una independiente de las demás podemos tener una única matriz que las agrupe todas bajo
un mismo nombre, y que permita que cada variable pueda manipularse por separado gracias a que dentro
de la matriz cada una está identificada mediante un índice numérico, escrito entre corchetes
Las matrices sirven para ganar claridad y simplicidad en el código, además de facilitar la programación.
Al utilizar matrices debemos tener presente que para consultar o asignar valores, debemos comenzar
indexando o numerando el primer elemento por el número cero, que será el primer elemento de la matriz.
Como declarar las matrices

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.

int misPines[] = {2, 4, 8, 3, 6};//declara una matriz de 5 variables tipo int

float misSensores[5] = {2, 4, -8, 3.8, 2.1}; //declara una matriz de 5 variables tipo float

char mensaje[5] = "Hola"; //declara una matriz de 5 elementos tipo char

char mensaje [] = "Hola"; //declara una matriz de 5 elementos tipo char

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

PRÁCTICA 4.1: Encender una secuencia de varios LEDs (Estrella


fugaz)
Encender una secuencia de varios LEDs simulando una
estrella fugaz: Un conjunto de 12 LEDs serán
encendidos de forma secuencial. Se simula con esta
práctica el comportamiento de una estrella fugaz.
Antes de comenzar la realización del montaje del
circuito electrónico, se debe realizar el circuito en el
programa TinkerCad.. Se van a usar los pines del 2 al
13 para conectar cada uno de los 12 LEDs.
IDE de Arduino para la práctica:

● Se selecciona la tarjeta Arduino que se está


utilizando sea Arduino Uno-R3
● Se selecciona el Puerto Serial. Bajo que
puerto USB se va a conectar el Arduino con el computador.

8
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

● Se empieza a realizar el código:


• Inicialmente debemos darle un nombre de qué consiste el código, esto se hace a través
del símbolo //, se puede colocar el título de la práctica o del programa en sí. También se
puede utilizar como comentarios dentro del programa.
• Se declaran las variables. En esta práctica introduciremos un tipo de variable que no ha
sido utilizada en las prácticas anteriores y es los vectores o arreglos. En concreto se crea
un vector del tipo entero :

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

PRÁCTICA 5: COMUNICACIÓN PUERTO SERIE


Los puertos serie son la forma principal de comunicar una placa Arduino con un ordenador. Gracias al puerto
serie podemos, por ejemplo, mover el ratón o simular la escritura de un usuario en el teclado, enviar correos
con alertas, controlar un robot realizando los cálculos en el ordenador, encender o apagar un dispositivo
desde una página Web a través de Internet, o desde una aplicación móvil a través de Bluetooth.
Existen un sin fin de posibilidades en las que se requiere el empleo del puerto serie. Por tanto, el puerto
serie es un componente fundamental de una gran cantidad de proyectos de Arduino, y es uno de los
elementos básicos que debemos aprender para poder sacar todo el potencial de Arduino.
¿Qué es el puerto serie?
Un puerto es el nombre genérico con que denominamos a los interfaces, físicos o virtuales, que permiten la
comunicación entre dos ordenadores o dispositivos.
Un puerto serie envía la información mediante una secuencia de bits. Para ello se necesitan al menos dos
conectores para realizar la comunicación de datos, RX (recepción) y TX (transmisión). No obstante, pueden
existir otros conductores para referencia de tensión, sincronismo de reloj, etc.
Por el contrario, un puerto paralelo envía la información mediante múltiples canales de forma simultánea.
Para ello necesita un número superior de conductores de comunicación, que varían en función del tipo de
puerto. Igualmente existe la posibilidad de conductores adicionales además de los de comunicación.

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

puertos RS-232 típicamente varían entre -13V a 13V).


Arduino y el puerto serie
Prácticamente todas las placas Arduino disponen
al menos de una unidad UART. Las placas
Arduino UNO y Mini Pro disponen de una unidad
UART que operan a nivel TTL 0V / 5V, por lo que
son directamente compatibles con la conexión
USB. Por su parte, Arduino Mega y Arduino Due
disponen de 4 unidades UART TTL 0V / 5V.
Los puertos serie están físicamente unidos a
distintos pines de la placa Arduino. Lógicamente,
mientras usamos los puertos de serie no
podemos usar como entradas o salidas digitales
los pines asociados con el puerto serie en uso.
En Arduino UNO y Mini Pro los pines empleados
son 0 (RX) y 1 (TX). En el caso de Arduino Mega y
Arduino Due, que tienen cuatro puertos de serie,
el puerto serie 0 está conectado a los pines 0
(RX) y 1 (TX), el puerto serie 1 a los pines 19 (RX)
y 18 (TX) el puerto serie 2 a los pines 17 (RX) y 16
(TX), y el puerto serie 3 a los pines 15 (RX) y 14
(TX).
Muchos modelos de placas Arduino disponen de
un conector USB o Micro USB conectado a uno
de los puertos de serie, lo que simplifica el proceso de conexión con un ordenador. Sin embargo, algunas
placas, como por ejemplo la Mini Pro, prescinden de este conector por lo que la única forma de conectarse a
las mismas es directamente a través de los pines correspondientes.

Recibir información desde el Arduino


En este primer código vamos a recibir el valor de un contador enviado desde la placa Arduino. Este valor se
incrementa cada segundo. Podemos observar cómo se reciben los valores desde del monitor serial.

11
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

Enviar información al Arduino


En este ejemplo empleamos el puerto serie para encender o apagar el LED integrado en la placa Arduino.
Para ello enviamos un carácter a la placa Arduino, empleando el monitor serial. En caso de enviar ‘a’ la placa
Arduino apaga el LED, y en caso de enviar ‘b’ lo enciende.

Enviar valores numéricos


Por último, en este ejemplo enviamos un número entre 1 a 9 a través del monitor serial, y la placa Arduino
hace parpadear el LED integrado el número de veces indicado. El código es similar al anterior, pero se hace
notar que al enviarse los datos caracteres ASCII, debemos restar el valor ‘0’ al dato recibido para recuperar el
valor numérico enviado.

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

PRACTICA 6. LECTURA DE UNA SEÑAL ANALÓGICA MEDIANTE UN


POTENCIÓMETRO. INTRODUCCIÓN AL PUERTO SERIE
POTENCIÓMETRO:

Simplificando, un potenciómetro es una resistencia variable.


Se trata de un elemento electrónico muy utilizado en cualquier ingenio electrónico, permite crear una
resistencia en un circuito variable entre infinitos ohmio y el valor nominal del potenciómetro, 10K, 50K,
100K, 1 M…
El potenciómetro tiene tres patitas, las dos de los extremos las debemos conectar a 5 V (Vcc) y a 0 V (GND), y
la pata que nos da la señal de entrada, y hace que se trate de un actuador, es la pata central que debemos
de conectar a una de las entradas analógicas de Arduino.
Una vez conectado, podemos hacer uso del mando del potenciómetro que varía la resistencia interna entre
0 y el valor nominal del potenciómetro y nos puede enviar un voltaje determinado al pin lógico.

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.

Potenciómetro horizontal para Potenciómetro metálico con Potenciómetro para


protoboard (10 K) mando (10 K) protoboard (10 K)

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

PRÁCTICA 7: DISPLAY 7 SEGMENTOS. LAS CONSTANTES


DISPLAY DE 7 SEGMENTOS

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.

Existen dos tipos de displays:

● 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

PRÁCTICA 7.1: DISPLAY DE 7 SEGMENTOS CONTROLADO POR UN


POTENCIÓMETRO. Función Mapear

19
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

20
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA 8: ENCENDIDO GRADUAL DE UN LED. SALIDAS PWM

8.1. MEDIANTE UNA SALIDA PWM, modulación por ancho de


pulso (Pulse Width Modulation)
La modulación por ancho de pulso o PWM es una técnica común que se utiliza para variar el ancho de los
pulsos en un tren de pulsos. PWM tiene muchas aplicaciones, como el control de servos y controladores de
velocidad, limitando la potencia efectiva de motores y LED.
Una señal PWM tiene dos componentes principales que definen su comportamiento: un ciclo de trabajo y
una frecuencia.

▪ 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

estados alto y bajo.

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

8.2. MEDIANTE UN POTENCIÓMETRO

23
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

24
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA 9. CONTROL DE BRILLO DE UN LED RGB. EMPLEO DE LA


FUNCIÓN MAPEAR map()
DIODO RGB (Red, Green, Blue)

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:

● El blanco se consigue con la combinación: 255, 255, 255

● El negro se consigue con la combinación: 0, 0, 0

● Cualquier combinación de tipo x, x, x da lugar a un gris.

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

● inicio rango de entrada

● final rango de entrada

25
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

● inicio rango de salida

● final rango de salida

Y la función devuelve el valor entero de salida una vez realizado el «mapeo».


Ejemplo de uso de la función map()
valor_led = map(valor_potenciómetro, 0,1023, 0,255);
El «valor-potenciómetro» corresponde al valor leído por un sensor de luz, cuyo rango puede variar de 0 a
1023, valores que ponemos en el segundo y tercer lugar; los valores de salida deben oscilar entre 0 y 255
(valores cuarto y quinto) porque servirán para iluminar un led, este valor se almacena en la variable «valor
led» como valor de salida de la función map().

26
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA 10: LAMPARA DE EFECTOS RGB


Las pantallas están formadas por píxeles, y cada Píxel tiene 3 luces diminutas de color rojo, verde y azul. por
eso se denominan pantallas RGB. con estos 3 colores básicos pueden formar cualquier color de entre 16
millones, que son más de los que el ojo humano puede distinguir.
Vas a hacer una lámpara compuesta por un RGB que aleatoriamente irá cambiando de un color a otro
variando progresivamente su intensidad.
La función ramdomSeed()

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 tres valores actuales del RGB

● Los tres valores a los que queremos llegar.

● 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

PRÁCTICA 11: LDR O FOTORRESISTENCIAS (Light Dependent


Resistor)
El LDR es un tipo especial de resistencia que permite que pasen a través de ella tensiones más altas (baja
resistencia) siempre que haya una alta intensidad de luz, y pasa una baja tensión (alta resistencia) siempre
que esté oscuro.
El LDR emite un voltaje analógico cuando se conecta a VCC (5V), que varía en magnitud en proporción
directa a la intensidad de la luz de entrada en él. Es decir, cuanto mayor sea la intensidad de la luz, mayor
será el voltaje correspondiente del LDR. Dado que el LDR emite un voltaje analógico, está conectado al pin
de entrada analógica en el Arduino. El Arduino, con su ADC incorporado (convertidor analógico a digital),
luego convierte el voltaje analógico (de 0-5V) en un valor digital en el rango de (0-1023). Cuando haya
suficiente luz en su entorno o en su superficie, los valores digitales convertidos leídos desde el LDR a través
del Arduino estarán en el rango de 800-1023.
Podemos utilizar como sensor un LDR (Light Dependent Resistor) o resistencia dependiente de la luz, junto
con una resistencia de 10 000 Ω, o 10 kΩ.

Módulo sensor de luz LDR


Existen en el mercado dos tipos de módulos, uno con tres terminales de salida, como el que aparece en la
imagen inferior que posee dos terminales de alimentación a 5 Vdc (VCC y GND) y DO (Digital Output) que es
una salida digital (alto o bajo).

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.

¿Por qué varía la resistencia al cambiar la luz?

29
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

La variación de la resistencia se debe a un fenómeno conocido como fotoconductividad por el que un


material se vuelve conductor de la electricidad debido a la absorción de radiación electromagnética.
Además, al estar fabricado con un material semiconductor, si la frecuencia con la que inciden fotones es
suficientemente alta, se producirán saltos de los electrones ligados hasta la banda de conducción,
reduciéndose así también la resistencia del material.
Por estos dos efectos, al incidir la luz sobre el LDR, el material se vuelve más conductor, por lo que su
resistencia disminuye.
En el valor de resistencia del LDR también influyen otros aspectos como, por ejemplo, la temperatura.
¿Cómo conecto un LDR?

Existen diferentes aplicaciones en las que utilizaremos el LDR (por ejemplo,


junto con un transistor o relé para activar las luces nocturnas de la calle),
pero la configuración básica siempre es la misma: conectado en serie con
una resistencia y con la salida de tensión entre ambos.
En el primer caso, la señal de salida Vout será 0 si incide luz, ya que la
resistencia será muy baja y se “conectará” a tierra, mientras que, si no incide la luz, la señal será alta.

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

11.1. LEER EL VALOR PROPORCIONADO POR UN LDR

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

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
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA ___: Joystick


Un joystick es un dispositivo de entrada que se utiliza comúnmente en
juegos y dispositivos de control. Consta principalmente de una palanca
que se puede mover en diferentes direcciones y presionar hacia abajo,
lo que permite al usuario controlar un cursor o un objeto en una
pantalla o en un dispositivo.
Los joysticks también suelen tener botones adicionales que se pueden
utilizar para realizar acciones específicas en el juego o en el dispositivo
controlado.
Cuando se mueve el joystick, los cambios en la posición de la palanca se
traducen en señales eléctricas que pueden ser leídas por el
microcontrolador de la placa Arduino. Estas señales se pueden utilizar
para controlar diferentes aspectos de un proyecto, como la dirección de un motor o el color de un LED.
¿Cómo obtener los valores del joystick?
El joystick o palanca tiene dos ejes, el eje x y el eje y. Para saber la dirección de cada uno leemos su valor
analógico con analogRead.
Cuando el joystick está en su estado normal, el valor está en aproximadamente 500, en cambio, cuando está
en su punto límite está en 0 o 1023.
En resumen, 0 es que está en el límite inferior (por ejemplo izquierda), 500 es que está sin moverse y 1023
es que está en el límite superior (por ejemplo, la derecha).
El botón
Por otro lado, el botón es una lectura digital, ya que es un 0 o un 1.
Circuito
Ahora que hemos visto cómo funciona de manera general vamos a
conectar. Necesitamos conectar los ejes a una entrada analógica,
normalmente vienen prefijados con la A, por ejemplo, A0 y A1.
Después, el botón es conectado a una entrada digital. No se recomienda
el 0 ni el 1 pues ahí se usa para RX y TX, así que podemos usar el 2.
Un modelo del circuito para usar el Arduino con el joystick es:

33
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA ____. LECTURA DE LOS BOTONE DE UN JOSTICK Y


CONTROL DEL ENCENDIDO Y APAGADO DE UN LED

34
IES DIEGO DE PRAVES ARDUINO CONTROL Y ROBÓTICA 3º ESO

PRÁCTICA _____: Sensor DHT11 para medir la temperatura y


humedad con Arduino
Una de las ventajas que nos ofrece el DHT11, además de medir la temperatura
y la humedad, es que es digital.
El DHT11 presume de ser un sensor con una alta fiabilidad y estabilidad
debido a su señal digital calibrada. Lo podemos comprar de dos maneras, de
forma individual donde solo tenemos el sensor DHT11, o insertado en una
PCB.
La diferencia en precio no es excesiva y la versión con PCB aporta una
resistencia pull-up de 5 kΩ y un LED que nos avisa de su funcionamiento. Otra
diferencia entre estas dos versiones del DHT11 son los pines.

Conexionado DHT11 sin PCB


Para conectar el circuito de una aplicación típica con un DHT11, necesitaremos tener una resistencia pull-up
conectada a la salida digital. La recomendación es utilizar una resistencia de 5 kΩ. Disponemos de 4 pines el
VCC (de 3,5V a 5V), la salida digital I/O, el pin no conectado NC y la toma de tierra GND.
El esquema eléctrico del DHT11 sería el siguiente:

Conexionado DHT11 con PCB


Al contrario que el otro modelo, el DHT11 integrado dentro de un PCB ya viene con la resistencia pull-up
integrada. Puede resultar muy útil en ocasiones, pero si añadimos un cable de más de 20 metros, deberemos
tener en cuenta este factor.
Este modelo de DHT11 dispone de 3 pines, la toma de tierra GND, para los datos DATA y para la alimentación
VCC (de 3,5V a 5V). En la siguiente imagen puedes ver el esquema de conexión con Arduino.

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

También podría gustarte