100% encontró este documento útil (1 voto)
429 vistas

Arduino Practicas

Este documento describe sensores, actuadores y la placa Arduino UNO. Los sensores pueden medir variables ambientales como la temperatura o humedad y convertir los datos a formato digital. Los actuadores pueden afectar el entorno mediante movimiento, sonido u otros cambios al convertir valores digitales. La placa Arduino UNO incluye puertos digitales y analógicos para conectar sensores y actuadores, y puede ser programada a través del entorno de desarrollo integrado de Arduino.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
429 vistas

Arduino Practicas

Este documento describe sensores, actuadores y la placa Arduino UNO. Los sensores pueden medir variables ambientales como la temperatura o humedad y convertir los datos a formato digital. Los actuadores pueden afectar el entorno mediante movimiento, sonido u otros cambios al convertir valores digitales. La placa Arduino UNO incluye puertos digitales y analógicos para conectar sensores y actuadores, y puede ser programada a través del entorno de desarrollo integrado de Arduino.
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 41

IES NICOLAS COPERNICO Arduino

Sensores y Actuadores
video sensores y video actuadores

Un sensor es un dispositivo, también conocido como transductor, que puede medir un dato del entorno
para digitalizarlo para transferirla a un ordenador.

Los sensores pueden medir cualquier variable del entorno, desde la temperatura hasta la humedad,
pasando por la presencia de personas o el tipo de objeto que alguien sujeta en su mano.

Los actuadores son dispositivos electrónicos, transductores, que pueden afectar el entorno
transformando un valor digital en un movimiento mecánico, la producción de sonido, un cambio de
temperatura, o de intensidad de la luz.
Ejemplos de actuadores, son motores, led, altavoces, etc,

La placa Arduino UNO.


video Arduino

Es una placa de circuito impreso con un microcontrolador, puertos digitales y analógicos de


entrada/salida, los cuales pueden conectarse a placas de expansión (shields), que amplían las
características de funcionamiento de la placa Arduino. Asimismo, posee un puerto de conexión USB
desde donde se puede alimentar la placa y establecer comunicación con el computador.

1
IES NICOLAS COPERNICO Arduino

Arduino puede "sentir" el entorno mediante la recepción de entradas desde una variedad de sensores y
puede afectar a su alrededor mediante el control de luces, motores y otros artefactos.

La placa Arduino UNO es la más empleada en el mundo en educación en este momento. Fue diseñada
para ser robusta y soportar toda una serie de situacioines de uso con estudiantes.
La placa incluye, entre otras cosas:

• 14 pines digitales de entrada y salida.


• 6 pines analógicos de entrada.
• un botón de reset que reinicia el programa corriendo en la placa.
• un puerto USB que sirve para programar la placa, hacer que comunique con un ordenador, o
alimentar todos los circuitos (a 5V) conectados a ella.
• un conector de alimentación externa.
• un puerto donde se puede sacar alimentación de 5V, 3V3 y tierra para tus sensores y actuadores.
• una serie de ledes para informar del estado del circuito.
• una serie de pines digitales que, además, pueden actuar como fuente de señales moduladas por
ancho de pulso (PWM).
• conexiones para puerto serie, SPI(serial Pheriferal interface), e I2C(inter-integrated circuit).

El entorno de programación. IDE.


video

Lo que normalmente se conoce como "programa Arduino" es en realidad un Entorno Integrado de


Desarrollo (IDE, en inglés). Este tipo de aplicaciones permite escribir y editar programas, compilarlos
(traducirlos al lenguaje que entiende el microcontrolador) y cargarlos en la placa Arduino
correspondiente. El IDE de Arduino es gratuito (www.arduino.cc)

El IDE permite escribir programas, compilarlos, descargarlos en placas y hacer una gestión simple de
ficheros. El 90% de las actividades que necesitas hacer cuando creas programas para Arduino están
representadas en la barra de tareas.

2
IES NICOLAS COPERNICO Arduino

Estas tareas son:

• Verify (verificar): compila el programa y te indica si la sintaxis es la correcta y si las funciones a


las que llama tu programa existen dentro de las librerías de código que estas utlizando.

• Upload (descargar o subir el programa – depende de nomenclaturas): compila el programa, pero


además intenta escribirlo en la memoria de tu placa Arduino. Te dará un mensaje final de éxito o error.

• New (nuevo): crea un nuevo programa, si tenías algo escrito en el editor, te dará la posibilidad
de guardarlo antes de crear uno nuevo.

• Open (abrir): abre un buscador de ficheros para que le indiques que programa quieres abrir. Los
programas de Arduino tienen la extensión *.ino.

• Save (guardar): te permite guardar tu programa donde quieras en tu disco duro, unidad USB,
disco de red, etc.

• Serial monitor (monitor puerto serie): es una ventana de diálogo que te permite comunicar con el
puerto de comunicación de tu placa Arduino, veremos más sobre esto al final de módulo.

Practica 1. Mi primer programa. Blink.


El programa Blink, es el más sencillo que podemos implementar y consiste en hacer parpadear uno de
los leds que tenemos en la placa Arduino concretamente el que está conectado a la pata nº 13 (marcado
con una "L" en la placa). Este programa viene ya con Arduino y está en la lista de ejemplos.

Cada vez que apliquemos un nivel alto (high) a la pata 13 el led se encenderá y cuando apliquemos un
nivel bajo (low) se apagará. Recordamos que un nivel significa que aplico voltaje a esa pata.

Empecemos.

La primera vez que conectemos Arduino Windows instará el controlador del dispositivo.

1º- Conectamos nuestro Arduino al PC con nuestro cable USB.

2º - Seleccionamos la placa apropiada en el menú Herramientas / Placa / . Seleccionamos Arduino


UNO ó Genuino UNO.

3º - Seleccionamos el puerto apropiado donde hemos conectado el cable USB al PC. En Windows
será un puerto COM, si hay varios normalmente será el más alto. Menú herramientas / Puertos.

4º - Escribimos el programa.

(normalmente los puntos 2 y 3 solo se realizarán la primera vez que conectemos la placa, pero si al subir el
programa me da un error, volverlo a comprobar)

3
IES NICOLAS COPERNICO Arduino

El programa.

Todo lo que escribamos entre /* y */ , es un comentario de varias líneas, no son instrucciones y es solo
para que el desarrollador o usuarios tengan información adicional.

//es también un comentario pero solo de una líneas, se utiliza para comentar una instrucción. Como
ayuda.

Todas las instrucciones tiene una estructura fija, es decir, no puedo omitir nada, ni paréntesis, ni puntos
y comas ni llaves etc. Además es sensible a las mayúsculas, es decir si una instrucción o parte de es en
mayúsculas no funcionará en minúsculas.

El IDE, cuenta con una gran ayuda: la sintaxis coloreada, esto significa que cuando reconoce algo que
está escrito de forma correcta le asigna un color determinado..

4
IES NICOLAS COPERNICO Arduino

En todo programa podemos distinguir dos funciones principales.

setup() - Solo se ejecuta una vez cuando se carga el programa.

loop() - Se ejecuta indefinidamente.

Es importante que todo programa tenga únicamente una función setup() y una función loop().

int led = 13; - Definimos una variable para el número de pin. Esto es habitual en cualquier
programa, de esta forma cuando nos vayamos a referir al pin nº 13 utilizaremos la variable "led", que nos
da más información que un simple número.

5
IES NICOLAS COPERNICO Arduino

Una Variable es una palabra que representa un espacio de memoria donde hay almacenado un dato.
Ese dato almacenado puede modificarse durante la ejecución del programa.

Algunos ejemplos de tipos de variables son:

byte num = 230; - tipo byte: un valor entre 0 y 255.

int val = 0; - tipo int: valor entero entre entre 0 y 216.

long bigval = 100; - tipo long: valor entero entre 0 y 232.

float decimal = 3.5; - tipo float: valor decimal

String cadena = "hola"; - tipo String: cadena de texto se pone entre comillas.

char c = 'A'; - tipo char: define solo un letra.

boolean result = true; - tipo boolean: toma valores de true o false.

La estructura es la que se muestra, primero el tipo, luego el nombre y después del igual es el valor que
tiene dicha variable de inicio. Luego ese valor podría ser modificado durante la ejecución del programa.

pinMode (led, OUTPUT); - Asigna un pin de la placa como entrada (input) o salida
(output), según vayamos a utilizarlo. En este caso como lo que queremos es aplicar voltaje, será una
salida.

digitalWrite (led, HIGH); - Asigna un nivel alto (HIGH) o bajo (LOW) a una entrada.

delay (1000); - tiempo de pausa en milisegundos.

- Compila y sube el programa a la placa (USB conectado) dos leds marcados con Tx y Rx en la
placa parpadearán durante la transmisión.

En la parte inferior del IDE , aparece el progreso de la carga. Si la carga se ha completado


correctamente me aparecerá un mensaje "carga terminada", si no, me aparecerá un mensaje de error
con una ayuda. Leerlo e intentar corregirlo.

Abrir el IDE, y copiar el programa Blink de la figura anterior. Las instrucciones tienen que estar
exactamente igual. Subir el programa a Arduino y comprobar el resultado.

(Ejercicios propuestos) Ep 1. Modifica el programa para que el parpadeo sea cada


medio segundo.

6
IES NICOLAS COPERNICO Arduino

Entradas y salidas digitales


Una entrada digital para un microcontrolador es una pata o terminal que es capaz de leer un valor de
voltaje de 0 V ó 5 V, es decir, un nivel bajo (low) ó alto (high). Una salida digital es capaz de "escribir"
esos valores (es decir poner ese pin a nivel bajo o alto)

Un ejemplo de dispositivo de entrada sería un simple pulsador. En la tabla vemos los términos
equivalentes para encendido y apagado.

ON OFF

5V 0V

HIGH LOW

1 0

TRUE FALSE

Arduino tiene 14 entradas y salidas digitales, pero tener en cuenta que las entradas 0 y 1 se utilizan
para la comunicación con el puerto serie, por tanto cuando queramos utilizar está comunicación no es
conveniente utilizarlas.

Además si fuera necesario las entradas analógicas también podrían utilizarse como digitales, A0 seria la
14, A1 la 15... y así sucesivamente. Por tanto podríamos disponer de un total de 20 entradas digitales.

Veamos esto con algunas prácticas.

Practica 2. Encender y apagar un LED


Vamos a utilizar el mismo programa Blink para encender y apagar un LED externo a Arduino.

Este es el circuito que vamos a montar.

Como sabemos el diodo led siempre se


monta en serie con una resistencia,
en nuestro caso utilizaremos una de
330 ohmios. También hay que tener en
cuenta la polarización de led. Conectar
el terminal negativo (la patilla más
corta) a tierra ó GND a través de la
resistencia y el terminal positivo
(patilla más larga) a una entrada digital
(el pin 2 en nuestro caso)

7
IES NICOLAS COPERNICO Arduino

¡¡¡IMPORTANTE!!! Los montajes se realizan siempre con la Arduino desconectada.

Abre el programa Blink, de la práctica 1 y modifica el 13 por el 2, puesto que en esta ocasión es la
entrada digital donde hemos conectado el LED.

Compilamos y subimos el programa a Arduino.

Ep 2. Igual que hicimos con Blink, modifica el programa para que el parpadeo sea cada
medio segundo.

Ep 3. Podemos hacer que emita destellos, haciendo que el tiempo de encendido sea más
corto que el de apagado. Por ejemplo que el tiempo de encendido sea 5 veces menos.

Practica 3. LED RGB


Este componente electrónico dispone en su interior de tres LEDs individuales (rojo, verde y azul) que
podemos encender de forma independiente o mediante cualquier combinación de ellos. Hay de ánodo
común y de cátodo común. El que nosotros vamos a utilizar es el de cátodo común. en la imagen
puedes ver el patillaje y el circuito equivalente.

Este es el circuito que vamos a montar.

Utilizamos resistencias de 330


Ω. Es aconsejable utilizar
cables de colores si
disponemos de ellos. El color
negro se utiliza siempre par las
conexiones a GND.

8
IES NICOLAS COPERNICO Arduino

Copiar el programa en IDE y probarlo.

En programación por norma general utilizamos mayúsculas para los nombres de variables y constantes.

Ep 4. Podemos cambiar el tiempo de espera para ver el efecto como en Blink. Sería
interesante puesto que el retardo aparece varias veces en el programa, definir una
constante, de esta forma si la queremos cambiar solo lo hacemos una vez.

int ESPERA = 500;

delay(ESPERA);

Ep 5. Si encendemos más de un led a la vez podremos forma distintos colores por


combinación de los tres colores primarios. Prueba.
9
IES NICOLAS COPERNICO Arduino

Practica 4. LED y pulsador


Una vez que hemos experimentado con las salidas digitales, vamos a hacer algo un poco más
interesante, combinar la salida con la lectura de una entrada digital.

El ejercicio consiste en hacer parpadear un LED (como hemos visto). Cuando el pulsador no esté
pulsado parpadeará a una velocidad y cuando lo pulse parpadeará más rápido.

El circuito será el siguiente. A esta configuración se le denomina Pull-Up.

PULL-UP. cuando el pulsador no está pulsado le estoy


aplicando a la entrada un nivel alto (5v), Cuando lo pulso
conecto la entrada con GND (nivel bajo).

PULL-DOWN. cuando el pulsador no está pulsado le estoy


aplicando a la entrada un nivel bajo (GND), Cuando lo pulso
conecto la entrada a 5V (nivel alto).

Esto lo tienes que tener en cuenta a la hora de hacer el


programa, para saber cuándo se activa la entrada.

El programa es el siguiente.

10
IES NICOLAS COPERNICO Arduino

En el tenemos algunas instrucciones nuevas.

#define PULSADOR 10 - definición de una constante. PULSADOR = 10. En la práctica es lo


mismo que como lo hacíamos antes (int PULSADOR =10;). Las constantes ocupan menos memoria que
las variables. Si no vamos a cambiar durante el programa el valor de PULSADOR, sería más adecuado
hacerlo así.

pinMode (PULSADOR, INPUT); - asignamos el número de pin definido con PULSADOR,


como entrada. Es decir por este pin vamos a leer datos.

11
IES NICOLAS COPERNICO Arduino

digitalRead (pin entrada) - nos permite leer el valor de una entrada digital. Los valores leídos
pueden ser HIGH ó LOW, que son los equivalentes de true y false ó a "1" y "0".

if (digitalRead (PULSADOR) == true)

{ // se ejecuta la condición true......

else

{ // se ejecuta la condición false......

}
Sentencia condicional para la toma de decisiones. Si (if) se cumple (true) se ejecutarán las acciones
correspondientes, si no se cumple (false) se ejecutarán las instrucciones dentro del "else"

Ep 6. Se trata de que el LED siga al estado del pulsador. El LED se encienda cuando esté
pulsado y se apague cuando no.
Pista: si utilizas la función delay es que estás haciendo algo mal.

Practica 5. El semáforo
En esta práctica vamos a simular el funcionamiento de un semáforo de forma simplificada.

El semáforo simula el funcionamiento de un paso de peatones. Las luces del semáforo representarían la
parte que controla la circulación de los vehículos, y el pulsador el botón que tiene que apretar el peatón,
para que se cierre el semáforo de los coches y poder cruzar.

Primero encenderemos los tres LEDS un segundo y los apagamos, para comprobar que todos
funcionan.

Después se encenderá el LED Verde y el sistema quedará a la espera de que se pulse el pulsador.
Cuando lo pulsemos se apagará el LED verde y el LED amarillo parpadeará 5 veces.

Para terminar, el LED rojo se encenderá durante 5 segundos y después se encenderá el LED verde,
quedando nuevamente a la espera del pulsador.

12
IES NICOLAS COPERNICO Arduino

Vamos a utilizar esta vez el montaje pull-down para ver la diferencia y que con cualquiera de los dos
puede funcionar, simplemente tengo que tenerlo en cuenta en la programación.

El circuito es el de la siguiente figura. Pin 2 como entrada digital para el pulsador. Pines 8, 9 y 10 como
salidas digitales para los LED.

13
IES NICOLAS COPERNICO Arduino

14
IES NICOLAS COPERNICO Arduino

int x; - variable entero, la utilizamos como contador del bucle for.

Podemos crear tantas variables como queramos, la única limitación es la cantidad de memoria RAM
disponible en el microcontrolador. Por convenio utilizamos mayúsculas para definir las constantes con
#define y minúsculas para las variables, esto nos permitirá cometer menos errores.

Bucle while
Permite ejecutar una parte del programa mientras una condición se está dando. La interpretación del
bucle while es diferente dependiendo de si ponemos punto y coma al final o no.

Bucle while que espera a que se deje de dar una condición:

while (condición);

Bucle while que ejecuta un fragmento (entre llave) de programa mientras se da una condición:

while (condición)

//fragmento de programa que se ejecuta mientras sea cierta la condición

En nuestro ejemplo utilizamos el primer tipo (con punto y coma) porque sin accionar el pulsador tenemos
aplicado a la entrada nº 2 un nivel bajo (GND), ya que estamos utilizando un montaje pull_down, es decir
PULSADOR = FALSE. Así, el while hace que el programa espere a que deje de cumplirse esa
condición, y eso sucederá cuando accione el pulsador aplicando un nivel alto (5V).

Bucle for
El bucle while se ejecuta un número indeterminado de veces, mientras se da una determinada
condición, tal y como hemos visto.

Por contra, el bucle for se ejecuta un número concreto de veces. Para controlar el número de veces que
se ejecuta el bucle for, necesitamos una variable que nos permita contarlas. Esta es la variable "x".

for (x=0; x<5 ; x++)

//fragmento de programa que se ejecuta 5 veces

El primer parámetro es el valor inicial que toma la variable, el segundo parámetro la condición final para
salir del bucle, y el tercer parámetro es en cuanto incrementamos la variable en cada iteración.

En nuestro ejemplo se leería como: se ejecuta desde "x" con valor cero mientras "x" sea menos de 5,
incrementando "x" de uno en uno, cada vez que se repite. (incrementar una unidad se expresa: x++,
decrementar una unidad x--)

15
IES NICOLAS COPERNICO Arduino

Ep 7. Hasta ahora los ejercicios propuestos implicaban modificaciones en el programa,


ahora es el momento de que también realices cambios en circuito.

Tienes que mejorar este semáforo, para ello vamos a poner dos LEDs adicionales (rojo y
verde), con sus respectivas resistencias, que representen las luces del semáforo que
regulan el paso de los peatones.

Modifica también el programa para que estos dos nuevos LEDs se enciendan y apaguen
como lo harían las luces del semáforo que regulan el paso de los peatones.

Practica 6. Lectura de un potenciómetro


E las dos prácticas anteriores el dispositivo de entrada (pulsador) solo nos podía dar dos tipos de
información: Pulsado o No pulsado (LOW O HIGH). En esta actividad usaremos un dispositivo de
entrada (sensor analógico) capaz de proporcionar múltiples valores. Además vamos a ver como poder
mostrar esta información en pantalla.

El circuito es el siguiente, uno de los más simples que vamos a realizar.

¡¡¡CUIDADO!!! No conectar el cursor (terminal central) del potenciómetro a 5V o GND


puede producir un cortocircuito al llevar el mando a alguno de los extremos.

La primera parte del problema parece sencilla, solo hay que leer el valor proporcionado por el
potenciómetro, pero ¿qué hacemos con él? ¿cómo podemos visualizarla?

Lo que vamos a hacer es visualizarla en el propio ordenador en el que está conectado la placa Arduino,
para ello vamos a aprender a enviar información por el puerto serie (USB) hacia el ordenador y
visualizarla.

16
IES NICOLAS COPERNICO Arduino

El programa que vamos a utilizar es el siguiente. Cópialo y guárdalo.

Como se lee una entrada analógica


17
IES NICOLAS COPERNICO Arduino

El número de valores distintos que puede distinguir una entrada analógica está determinada por el
número de bits del convertidor Analógico/Digital que se encuentra en el interior del microcontrolador de
la placa Arduino.

En este caso concreto es un convertidor A/D de 10 bits por tanto el número de valores está determinado
por:

Número de valores = 2número de bits = 1024


Es decir podemos tener 1024 medidas distintas, entre 0 y 1023.

El potenciómetro funciona como un divisor resistivo variable, así estaremos variando el voltaje entre 0 y
5 V. Lectura 0 corresponde a 0 V y lectura 1023 a 5V.

Para calcular el voltaje que corresponde a cada lectura del convertidor aplicamos la siguiente expresión.

Ventrada = (VMAX / 1024 ) • Lectura Ventrada = (5 V / 1024 ) • 422 = 2,06 V

Para poder almacenar los datos con decimales tenemos que utilizar variables tipo float.

Comunicación entre Arduino y el ordenador.


Si cargamos el programa es de esperar que funcione correctamente, aunque aparentemente no ocurra
nada ¿O sí?

Cerca de la entra USB hay unos LEDs marcados con TX y RX que monitorizan la comunicación entre
Arduino y ordenador.

• LED TX: comunicación placa Arduino hacia ordenador.

• LED RX: comunicación ordenador hacia placa Arduino.

Una vez cargado el programa vemos que el TX se queda parpadeando (en prácticas anteriores no
pasaba), esto es porque está enviando información al ordenador.

Para poder visualizar estos datos, hay que abrir una pequeña ventana en el ordenador que se comporta

como un pequeño terminal de texto. Hacemos clic en el botón que se encuentra a la


derecha de la pantalla del IDE. Al hacerlo se abrirá un pequeña pantalla donde se mostraran los valores
que está leyendo desde la entrada analógica.

18
IES NICOLAS COPERNICO Arduino

En la parte inferior derecha de la ventana se muestra la velocidad de comunicación: 9600 baudios. Este
número tiene que coincidir con el valor que pusimos en la función Serial.begin en el programa.

El número que aparece (520) corresponde con un voltaje de:

Ventrada = (5 V / 1024 ) • 520 = 3,55 V

Veamos las funciones nuevas que aparecen en este ejemplo:

Serial.begin (velocidad) - inicializa la comunicación con el puerto serie a una determinada


velocidad, habitualmente 9600.

analogRead (nº pin entrada) - para leer un valor desde una entrada analógica.

Serial.print ("texto") - envía por el puerto serie lo que se ponga entre los paréntesis. Si es texto
tiene que ir entre comillas. No cambia de línea.

Serial.println ("texto") - Igual que el anterior pero al terminar cambia de línea.

19
IES NICOLAS COPERNICO Arduino

Operaciones con coma flotante.


Para operar con decimales necesitamos que todas las variables y constantes definidas en el programa
sean del tipo float.

Por ejemplo, vamos a calcular e voltaje de una medida analógica mediante un programa para Arduino.
En el ejemplo solo vamos a poner las partes representativas, no el programa completo.

primero la variable donde guardar los resultados:

float valor_voltios;

La medida y el cálculo será algo así (como hemos visto anteriormente)

valor_voltios= (5.0/1024.0)*analogRead(POT);

al poner 5.0 y 1024.0 estamos diciendo al programa que trate a estos valores como decimales.

Ep 8. Vamos a modificar el programa de esta actividad para que muestre el valor de voltios
de la entrada analógica donde está conectado el potenciómetro. Algo así como:

"La medida es: 2.37 V" Prácticamente ya está hecho en el apartado anterior.

Ep 9. Tomando como base el ejercicio inicial de la practica 6, vamos a modificar el circuito


y programa. En primer lugar añadimos un LED con su resistencia a una salida digital. A
continuación cambiaremos el programa para que el LED se encienda cuando la lectura
analógica supere un determinado valor: 450 por ejemplo.

Practica 7. Controlando el brillo de un LED con un potenciómetro.


En este montaje disponemos de dos dispositivos, uno de entrada (potenciómetro) y otro de salida (LED).
La información del potenciómetro (sensor) nos servirá para regular de forma continua la luminosidad del
LED (actuador).

20
IES NICOLAS COPERNICO Arduino

Salidas de control PWM (Modulación por ancho de pulso).


La mayoría de los automatismos, incluido Arduino, no puede generar una señal analógica de salida.
Para salvar esta limitación y simular una salida analógica la mayoría de los automatismos emplean un
“truco”, que consiste en activar una salida digital durante un tiempo y mantenerla apagada durante
el resto. El promedio de la tensión de salida, a lo largo del tiempo, será igual al valor analógico
deseado.

Una salida PWM permite controlar la energía que aplica al actuador (un LED en nuestro caso),
regulando el tiempo que dicha salida permanece activa. Veamos el siguiente gráfico.

• La señal PWM al 100% es equivalente a una señal


digital en la que está todo el rato activa.

• La señal PWM al 75%, está activa durante 3/4 del


tiempo.

• La señal PWM al 50% tenemos una señal activa


solamente la mitad del tiempo

• La señal PWM al 25%, activa un cuarto de ciclo.

• La señal PWM al 0% equivale a una señal digital a


nivel bajo (0).

21
IES NICOLAS COPERNICO Arduino

Si hacemos esto lo suficientemente rápido tenemos un efecto equivalente a que un LED brilla la mitad, o
un motor gira a un cuarto de su velocidad máxima.

Seis salidas digitales 3, 5, 6, 9, 10 y 11, de la placa Arduino UNO (las que empiezan con el símbolo ∼)
tienen capacidad de actuar como salidas PWM.

El programa es el siguiente.

analogWrite (pin, valor) - controla la salida de los pines digitales PWM (3, 5, 6, 9, 10 y 11)
No necesita configurar el pin en modo alguno (INPUT, OUTPUT), es por eso que no hemos utilizado en
el ejemplo la función pinMode para la salida 6.

pin: número del pin digital con soporte PWM (en nuestro ejemplo el 6)

valor: es un número comprendido entre 0 y 255, donde 0 representa siempre apagado y 255 siempre
encendido. Así por ejemplo un valor de 127 representaría una señal con el 50% del tiempo encendido y
el resto apagada.

22
IES NICOLAS COPERNICO Arduino

Función map()
Como hemos visto la función analogWrite tiene un rango de funcionamiento de 0 a 255. Desde el punto
de vista humano sería mejor hablar de 0 al 100% (aunque se pierda algo de resolución).

Este tipo de situaciones es bastante frecuente. Por ejemplo ya hemos visto que en las entradas
analógicas (como el potenciometro) el rango de medida es de 0 a 1023, cuando en realidad representa
de 0 a 5 V.

En definitiva, en los programas suele ser bastante habitual tener que realizar cambios de un rango a
otro.

Para ayudarnos en esto Arduino dispone de la función map().

map (valor, minEntrada, maxEntrada, minSalida, maxSalida)


donde:

• valor: número (entero) que queremos cambiar de rango

• minEntrada: valor mínimo del rango de entrada

• maxEntrada: valor máximo del rango de entrada

• minSalida: valor mínimo del rango de salida.

• maxSalida: valor máximo del rango de salida.

En esta práctica hemos utilizado la función map para ajustar el rango de la entrada analógica (0-1023)
con el rango de la salida PWM (0-255).

Cuando el cursor del potenciómetro esté a la mitad, la salida PWM estará proporcionando una señal que
estará el 50% del tiempo activa, y esto sucederá de forma proporcional para cualquier posición del
cursor.

23
IES NICOLAS COPERNICO Arduino

Ep 10. Modifica el programa para que además de controlar el brillo del LED visualice en la
pantalla del ordenador los valores medidos y enviados a la salida PWM.

Tienes que aplicar lo visto en la práctica anterior.

Practica 8. Sensor de luz LDR.


La LDR es un resistor cuyo valor óhmico disminuye según aumenta la cantidad de luz que recibe.

AUMENTA LUZ DISMINUYE RESISTENCIA

DISMINUYE LUZ AUMENTA RESISTENCIA

El circuito a montar es el siguiente. Una LDR en serie con una resistencia (en nuestro caso de 4K7).

24
IES NICOLAS COPERNICO Arduino

Necesitamos un mecanismo para medir las variaciones de resistencia


que son proporcionales a la variación de luz. Lo más simple es utilizar
un divisor de tensión formado por dos resistencias, una variable (LDR) y
una fija (en nuestro caso de 4K7).

El voltaje a medir se encuentra en el punto medio (Vout) que es donde


conectamos la entrada analógica. Es decir medimos el voltaje en la
resistencia fija.

Analicemos el circuito.

Los 5 V de alimentación se repartirán entre las dos resistencia por que


están en serie. Simplemente aplicando la ley de OHM; V= R * I , y
teniendo en cuenta que su Intensidad es la misma por estar en serie,
nos damos cuenta que la resistencia mayor tendrá más voltios.

• Cuando la LDR reciba mucha luz, su resistencia será baja. Por


tanto su Voltaje será bajo y el voltaje de salida (Vout) será
mayor.

• Cuando la LDR reciba poca luz, su resistencia será alta. Por


tanto su voltaje será alto y el voltaje de salida (Vout) será
menor.

porque siempre se cumple que

Si quisiéramos que se comportara al revés simplemente cambiaríamos de posición las resistencias.

El programa sería el siguiente.

25
IES NICOLAS COPERNICO Arduino

Como vimos en la práctica anterior, las entradas


analógicas reciben un valor entre 0 y 1023. El 0
corresponde con 0 V y 1023 con 5V.

Los valores que veremos serán los


correspondientes a Vout.

Observa como al aumentar la luz, la medida


mostrada también aumenta.

26
IES NICOLAS COPERNICO Arduino

Ep 11. Mapea el valor leído como hicimos en la práctica anterior para obtener el tanto por
ciento de luminosidad detectado. Es decir máxima luz será 100% que corresponderá con
una lectura de 1023 y la mínima del 0% que corresponderá con una lectura de 0. El
mensaje se tiene que mostrar de la siguiente manera.

Ep 12. Añadir un led con su resistencia al circuito y conéctalo cualquiera de las entradas
digitales. El LED se encenderá cuando el nivel de luz esté por debajo del 30%.

Esta solución podría ser el programa que implementa el encendido automático de las
farolas.

En este ejercicio tienes que quitar la parte referente al envío de información al ordenador.

Ep 13. Vamos a utilizar 3 LEDs (rojo, verde y amarillo) con sus resistencias de 330 Ω. Se
encenderán según la siguiente tabla.

Condición LED rojo LED amarillo LED verde

LUZ < 30% Encendido Apagado Apagado

LUZ > 30% y Luz < 60% Apagado Encendido Apagado

LUZ > 60% Apagado Apagado Encendido

Practica 9. Generación de sonido.


Otra característica de Arduino es que es capaz de emitir sonidos. Esto se consigue gracias a la
instrucción tone, que genera una onda cuadrada de una frecuencia (sonido) y duración determinada por
sus parámetros de entrada.

Cada nota musical se corresponde con una frecuencia concreta, así una melodía simple puede ser una
sucesión de sonidos de una determinada frecuencia y duración. Esto es lo que vamos a hacer.

Para poder asociar a cada frecuencia su duración vamos a utilizar un sistema de almacenamiento
nuevo, el array. Que explicaremos más adelante.

Vamos a empezar por algo muy simple, realizar un programa que sea capaz de atacar un altavoz (un
zumbador en nuestro caso) en serie con un resistencia de 100 Ω, para reproducir sonido directamente
desde el chip. No será un archivo wav o mp3, si no que vamos a generar sonido directamente desde
código.

Primero vamos a conectar el altavoz a través de la resistencia a una de las entradas digitales, por
ejemplo la 4. Conectamos el cable azul o negro a tierra (GND) y el rojo al pin 4.

27
IES NICOLAS COPERNICO Arduino

Podemos partir del ejercicio Blink de la primera práctica. Borrar todos los comentarios y cambiar el
nombre de la variable "led" por "speaker". Funcionaría igual sin cambiar el nombre de la variable, pero
siempre es recomendable utilizar nombres de variables que tengan que ver con lo que estamos
haciendo. Y también cambiar la número de pin digital.

Es programa emitirá un tono cada medio segundo. Como ves no hemos utilizado la función tone,
simplemente utilizamos el altavoz como cualquier otro actuador de los que hemos visto anteriormente.

Modificar el retardo a 1 milisegundo y comprobaréis que se emite un tono continuo.

Modificar el retardo a 2 milisegundos y comprobaréis que se obtiene un tono más grave. Jugando con el
retardo obtenemos distintos tonos.

delayMicroseconds (); esta función me proporciona mil veces más resolución que delay().

si en nuestro ejemplo utilizamos esta función con un retardo de 1136, reproduciremos la nota LA.
Probarlo.

28
IES NICOLAS COPERNICO Arduino

Vamos a ver cómo trabajar con tonos directamente sin tener que trabajar con retardos que es más
intuitivo.

tone (pin, frec); - esta función tiene dos parámetros el pin que voy a activar y la frecuencia a
tocar.

tone (pin, frec, dur); - puedo añadir un tercer parámetro que es la duración de la nota.

noTone (pin); - desactiva el tono en el pin.

Practica 9_1. Abre el siguiente ejemplo y pruébalo.

Archivo / ejemplos / Digital / toneMultiple

Es otro ejemplo también es muy simple, y nos sirve para


ver cómo funcionan estas nuevas instrucciones. Cómo
puedes ver ni siquiera hemos definido los pines.

Este programa ejemplo está preparado para activar


diferentes pines, suponiendo que tengo más de un
altavoz, como nosotros tenemos solo uno y está
conectado al pin 4, tenemos que cambiar todos los pines
al 4.

Practica 9_2.

El IDE tiene la posibilidad de añadir nuevas pestañas en las que repartir el código de forma elegante.

En el ejemplo anterior, vemos que aparece otra pestaña llamada "pitches.h",

en la que están definidas todas las notas con su correspondiente frecuencia.

29
IES NICOLAS COPERNICO Arduino

(Podríamos hacerlo directamente como hasta ahora, al


principio del programa, pero definir variables y constantes en
otra hoja puede ayudarnos mucho si el programa es mucho
más complejo).

Si incluimos en la primera línea de código la sentencia

#include "pitches.h" , podremos utilizar dichas


constantes. De esta forma podemos utilizar en lugar de
números nombres de notas que es mucho más intuitivo.

Pruébalo. Simplemente incluye la instrucción anterior al principio del programa y cambia los números de
frecuencia por su nombre correspondiente en la pestaña "pitches.h". Por ejemplo, en lugar de 440 por
NOTE_A4.

Practica 9_3. Tocando una melodía. Array y bucle for

Al principio del tema vimos que existen distintos tipos de variables (byte, int, long, float, string, char,
boolean)

Existe también un sistema de almacenamiento de orden superior, el Array.

Un Array que es un conjunto de variables (posiciones de memoria) del mismo tipo. La estructura es la
siguiente.

30
IES NICOLAS COPERNICO Arduino

Ejemplo, Array de cadenas de texto.

string dia; //variable tipo cadena de texto.

string semana[] = {lunes, martes, miércoles, jueves, viernes, sábado, domingo };

si escribo:

dia = semana[3]; // estoy asignando a la variable "día" el valor "jueves".

31
IES NICOLAS COPERNICO Arduino

El bucle for es una estructura que se utiliza cuando queremos que una serie de acciones se repita un
número determinado de veces, para ello se necesita de una variable índice, una condición y un
incrementador.

Vamos a ver esto con un ejemplo real. Abrimos Archivo / Ejemplos / Digital / toneMelody este ejemplo es
capaz de tocar una melodía.

Observa que nosotros nos utilizamos el pin de salida número 8. Cámbialo por el nuestro.

Primero observa que la primera sentencia de programa es #include "pitches.h" , para poder utilizar las
definiciones de notas creadas en esa pestaña.

En este ejemplo definimos la melodía de la siguiente forma.

Estamos definiendo una Array de enteros (int) con el nombre "melody". Los corchetes [ ] , indican que es
un Array. Dentro de las llaves { } , y separados por comas, introducimos el valor inicial de las diferentes
variables, que serán las notas a tocar ( el cero es un silencio). En este caso tiene 8 notas.

32
IES NICOLAS COPERNICO Arduino

Para ir tocando la melodía tenemos que ir seleccionando cada posición del Array, por ejemplo,

melody[0] = NOTE_C4

melody[1]= NOTE_G3

...

melody[8]=NOTE_C4

En el ejemplo también hemos definido otro Array para las duraciones de las notas.

Lo que hacemos después es recorrer el Array mediante un bucle For.

En nuestro ejercicio como queremos pasar por todas las notas contaremos hasta 8 en incrementos de 1.

(0,1,2,3,4,5,6,7) por que la condición es que sea menor de 8.

Hemos creado una variable "thisNote" que inicializamos a 0 y que incrementamos con la sentencia
"thisNote++"

La duración podemos considerar 1 segundo (1000 milisegundos) divido por la duración, así sería un
cuarto de nota (1000/4) un octavo de nota (1000/8), y así....

El programa está definido en el setup() por lo que sonará solo una vez. Para que vuelva a sonar
tendremos que pulsar el botón de reset.

Ep 14. Prueba esta melodía, y haz los ajustes necesarios para que funciones

Ep 15. Melodía del primer Mario Bross. Haz los ajustes necesarios para que funcione.

Puedes añadir más notas y hacer tu propia versión.


33
IES NICOLAS COPERNICO Arduino

Ep 16. Añade un LED y su correspondiente resistencia a una salida digital. El LEd se


encenderá solo cuando suene una determinada nota. (por ejemplo NOTE_A6)

Practica 10. Thermin.


Si no sabes que es un Thermin, dedica unos minutos a buscar información sobre el.

Nosotros vamos a hacer un Thermin simplificado. Utilizaremos el circuito anterior al que añadiremos una
LDR y su resistencia. Este sensor nos detectará la posición de nuestras manos y según esta reproducirá
un sonido u otro. En realidad solo conseguiremos que reproduzca un sonido diferente cuando lo
toquemos (poca luz)

34
IES NICOLAS COPERNICO Arduino

El circuito es el de la figura.

Como podemos ver tenemos dos circuitos diferentes un formado por la LDR y su resistencia que nos
proporcionará la distancia entre la mano y el LDR (instrumento en este caso).

El otro es el de la anterior práctica, un zumbador con su resistencia, que reproducirá el sonido.

El programa es el siguiente.

Prueba a cambiar los valores de las


constantes SILENCIO, F_MAX y F_MIN,
para ver cual se aprecia mejor el efecto.

35
IES NICOLAS COPERNICO Arduino

Practica 11. Cómo controlar dispositivos mediante un transistor.


Hasta ahora todo los dispositivos de salida (actuadores) utilizados han sido de baja potencia, es decir
como mucho necesitaban 30mA por pin. ¿pero qué pasa si queremos utilizar actuadores de mayor
potencia? Tenemos que interponer entre la salida de Arduino y el actuador un driver que nos
proporcione más potencia. Nosotros utilizaremos uno muy sencillo que es un transistor MOSFET.

Un MOSFET es un transistor de potencia, permite a nuestro Arduino manejar voltages o cargas mas elevadas que las
normalmente soportadas por las salidas de la placa.

Este transistor puede manejar corrientes de hasta 30A y voltajes de hasta 100v

El circuito es el siguiente

Vamos a controlar el encendido y la potencia de una "carga más potente" que simularemos con tres
LEDs blancos. Para hacerlo un poco más complicado (si no sería igual que una de las actividades que
hicimos al principio), vamos a controlar el encendido y apagado del conjunto de LEDs de forma
progresiva. Para ello utilizaremos las salidas PWM, vistas en la práctica 7, pero en lugar de utilizar un
potenciómetro lo haremos mediante secuencias de encendido y apagado incluidas en nuestro programa.

El programa es el siguiente. Analízalo y pruébalo.

36
IES NICOLAS COPERNICO Arduino

(Este montaje nos servirá para la práctica siguiente, no lo desmontes.)

Ep 17. Tienes que controlar el brillo de los LEDs de forma inversa a la luz detectada por
un LDR. Utilizaremos el mismo circuito pero hay que añadir una LDR con su resistencia (
práctica 8), además habrá que modificar el programa.

Max luz --- Brillo mínimo LEDs

Min luz --- Brillo máximo LEDs


Consejo: No es necesario utilizar el bucle for. Fijate en el programa de la práctica 8 para controlar la LDR. Utiliza la
información de la LDR, para controlar la salida 6 PWM donde está conectado el resto del circuito (transistor y leds)

37
IES NICOLAS COPERNICO Arduino

Practica 12. Control de motores eléctricos.


Un motor es un dispositivo que necesita mucha corriente para el arranque.

Podemos comprobar que si conectamos directamente un motor a 5V y GND de Arduino, el motor


funciona. Esto es debido a que Arduino pude entregar la suficiente corriente entre estos terminales de
alimentación.

Si ahora probamos a conectar el motor a una salida digital veremos que ya no funciona, por que las
salidas digitales no entregan tanta corriente. Puedes probarlo con el programa de la práctica 1,
conectando el motor entre GND y la pin 2 (salida digital).

Por tanto necesitamos amplificar la corriente para poder entregar más al motor. ¿Cómo lo hacemos?
Efectivamente con un transistor.

En la práctica anterior (práctica 11) podemos sustituir los diodos y resistencias por el motor, es decir, un
contacto a 5 V y el otro al terminal D del transistor.

Compruébalo.

Practica 13. Display 7 segmentos con Arduino.


Vamos a mostrar en un Display la cuenta de 0 a 9.

El display que vamos a utilizar es en cátodo común y vamos a poner unas resistencias de 330 ohmios para proteger cada
uno de los LEDs correspondientes a los segmentos del Display.

Para simplificarlo, en lugar de poner una resistencia por cada segmento, vamos a poner una sola conectada entre el
terminal GND del display y masa en al protoboard.

Cada uno de los segmentos los conectaremos a una salida digital de Arduino.

PATILAJE DEL DISPLAY 7 SEGMENTOS.

El montaje será el de la siguiente figura, pero ten en cuenta que el display de la figura no es el mismo que
vamos a utilizar nosotros. Fíjate en el patillaje (figura anterior).

El cable azul no es necesario, porque es para iluminar el punto del display.

38
IES NICOLAS COPERNICO Arduino

El programa es muy simple. Define los pines, luego configura como "salida" los terminales donde has conectado los
segmentos del display.

utilizando la instrucción digitalWrite, hay que poner a nivel alto, los pines correspondientes a los segmentos que se tienen
que encender con cada número. Deja un retarde de medio segundo entre número y número.

ejemplo: para mostrar "0": Todos a HIGH, excepto el segmento g que será LOW.

Ahora te toca a ti. Realiza el programa y prueba su funcionamiento.

39
IES NICOLAS COPERNICO Arduino

Ep 18. Al mismo circuito anterior, vamos a añadir dos pulsadores con sus resistencias en
pull-down (ver práctica 4). Estos pulsadores se conectarán a dos entradas digitales. El
programa se tiene que comportar de la siguiente forma:

• ningún pulsador pulsado (0,0) --- display muestra un "0"

• solo pulsando el izquierdo (0,1) -- display muestra un "1"

• solo pulsando el derecho (1,0) -- display muestra un "2"

• pulsando los dos a la vez (1,1) -- display muestra un "3"

Practica 14. Display 7 segmentos con Arduino . Microinterruptor


Vamos a controlar un display 7 segmentos mediante un microinterruptor que proporcionará un código binario según la
siguiente tabla. "1" conexión a Vcc (high) , "0" conexión a tierra, GND (Low)

D C B A abcd efg VISUALIZACIÓN

0 0 0 0 1111110 0

0 0 0 1 0110000 1

0 0 1 0 1101101 2

0 0 1 1 1111001 3

0 1 0 0 0110011 4

0 1 0 1 1011011 5

0 1 1 0 0011111 6

0 1 1 1 1110000 7

1 0 0 0 1111111 8

1 0 0 1 1110011 9

40
IES NICOLAS COPERNICO Arduino

El circuito sería el de la foto.

La parte del micro interruptor sería la siguiente.

El resto valdría (display) sería como en la práctica anterior.

Observar que en la foto aparece una resistencia por cada segmento, pero podemos dejar una única resistencia conectada
a GND, como hicimos en la práctica anterior.

INTÉNTALO

41

También podría gustarte