Sei sulla pagina 1di 19

PRÁCTICA 8: ATMEGA328 (puertos)

Objetivos
Conocer el funcionamiento de los puertos de entrada-salida del ATMEGA328. Se
utilizarán como puertos digitales.

Puntos que hay que desarrollar previamente


 Instrucciones básicas *ARDUINO
 Registros más importantes

Introducción
El microcontrolador del Arduino UNO es ATMEGA328. Para poder simular el funcionamiento
de los programas en Proteus, hay que obtener el archivo compilado del IDE de Arduino con
la extensión. “.elf”. Se puede configurar el entorno de programación como podéis ver en el
anexo para tener más accesible ese archivo.

Ejercicio 1: led intermitente

En este ejercicio se hace parpadear un led conectado al puerto D3 (L2 conectado al pin 5
del ARDUINO). En Arduino, abrir el ejemplo Blink. Cambiar el pin para que sea el pin 5
quién gobierne el LED. Una vez compilado el proyecto, abrid Proteus y realizad la
simulación.

Si la simulación se correcta, volcad el sketch a la placa, la estructura de la cual se muestra


a la imagen:

En la tarjeta de adaptación se representa dónde van conectados los diferentes periféricos a


los pines del ARDUINO.
Y en la tabla adjunta, la correspondencia con los puertos del micro ATMEGA328
Periférico Pin Arduino PUERTO ATMEGA328
LCD: D7 13 B5
LCD: D6 12 B4
LCD: D5 11 B3
LCD: D4 10 B2
LED Verde: L4 7 D7
LED Amarillo: L3 6 D6
LED Rojo: L2 5 D5
Pulsador: SW 4 D4
Base del transistor Bipolar: BJT 3 D3
Sin conectar a ningún periférico: NC 2 D2
Sin conectar a ningún periférico: NC A3 C3
Potenciómetro: POT A2 C2
Pulsadores de dirección: KEY A1 C1
Sensor de temperatura: LM35 A0 C0
Display LCD, Enable: E 9 B1
Display LCD: RS 8 B0

Escribid el mismo sketch accediendo directamente a los puertos correspondientes.

Ejercicio 2: encendido de 2 leds de forma alterna

Modificad el programa anterior para conseguir que se enciendan, de forma


alternada, los leds: rojo (L2, conectado al pin 5) y verde (L4, conectado al pin 7)
durante 1 segundo cada uno.

Ejercicio 3: encendido secuencial de leds

En este caso se plantea la realización de un semáforo.


Se propone una secuencia infinita, con los estados siguientes:
Led verde encendido: 3 segundos (amarillo y rojo apagados)
Led amarillo parpadeando: 3 segundos (rojo y verde apagados)
Led rojo encendido: 3 segundos (verde y amarillo apagados)

Ejercicio 4: encendido de led con pulsador


En este caso se usa el botón SW _RB0, conectado al pin 4, de forma que al pulsarlo
y soltarlo se encienda el led rojo, y al pulsarlo y soltarlo de nuevo, se apague.

Ejercicio 5: quiniela electrónica

Se quiere diseñar un sistema de ayuda para rellenar quinielas. Para hacerlo se


utilizan los tres leds de la placa, de forma que el led rojo representa un resultado “1”; el
amarillo, “X”; y el verde, “2”. Cada vez que se pulse el botón SW_RB0, se tiene que dar un
pronóstico aleatorio “1”, “X” o “2”.
CONFIGURACIÓN DEL IDE DE ARDUINO
1. Abrir el IDE de Arduino

2. Dirigíos al menú Archivo y seleccionar Preferencias

3. En la parte inferior de la ventana de preferencias, haced click en la ruta donde se guarda el documento
preferences.txt.

4. Una vez se haya abierto la ventana donde se encuentra situado el archivo preferences.txt es importante
cerrar el programa de Arduino (De no hacerlo los cambios no se efectuarán como es debido).

5. Abrir el archivo preferences.txt, buscar la línea que dice export.application.stop=true y bajo escribir la
siguiente línea build.path=ruta deseada

6. Guardáis el archivo preferences.txt y volvéis a abrir el IDE de Arduino

Todo sobre ARDUINO:


https://aprendiendoarduino.wordpress.com/2016/11/10/programacion-arduino-3/
PRÁCTICA 9: motor paso a paso
Objetivos
Conocer el funcionamiento de los puertos de entrada-salida del ATMEGA328. Se
usan como puertos digitales.

Puntos que hay que desarrollar previamente


 Instrucciones básicas del *ARDUINO
 Registros más importantes

Introducción
El ATMEGA328 posee características especiales que hay que tener en cuenta para
programarlo.

Ejercicio 1: control del sentido de giro de un motor paso a paso.


Simulación.

Dibujad el esquema siguiente en Proteus.

Los Componentes utilizados son:

La secuencia de señales para controlar el motor paso a paso y que se tiene que
aplicar a las entradas del L293 es la que se muestra en la tabla siguiente. Para
invertir el sentido de giro, basta con invertir la secuencia de activación.

PASO TERMINALES
IN1 IN2 IN3 IN4
1 H L H L
2 H L L H
3 L H L H
4 L H H L
El control de sentido de giro se hace mediante la entrada 8. Hay que insertar un retraso
entre paso y paso del motor. Del retraso introducido depende la velocidad de giro del
motor.

a) Dibujad el organigrama de funcionamiento.

b) Escribid el código ARDUINO

c) Haced la simulación de funcionamiento con Proteus.

Ejercicio 2: control del sentido de giro de un motor paso a paso.


Circuito real

 Características del motor paso a paso real utilizado para la práctica conectado de
la forma que indica la mesa: Ángulo de giro: 1,8° por paso (7,2° en los 4 pasos).
Número de pasos por vuelta: 360/1,8 = 200.
 Tiempo mínimo para cambiar de paso: 1,25 ms.

MONTAJE REAL

a) Conectad la placa PCB con el CI de control del


motor (L293) siguiendo las conexiones del
esquema.
b) Conectad el motor paso a paso a la placa de
control.
c) Ponedlo en marcha y comprobad el funcionamiento.

1. Modificaciones

a) Variación de la velocidad del motor. Cambiáis el +12V GND +5V EN IN1 IN2 IN3 IN4
programa porque el motor giro a velocidad doble
que el anterior.
b) Cambio de sentido del motor.
Conectad la entrada 8 de forma que, cuando se aplique un 0, el motor giro en un
sentido, y cuando se aplique un 1, gire en sentido contrario. Modificad el programa.
La forma más sencilla de realizar el programa es que el cambio de sentido solo se
pueda llevar a cabo en uno de los cuatro pasos. Para hacerlo así, la entrada es leída
en un solo paso de todo el ciclo y, según el valor de esta, el programa ejecuta la
secuencia de variación de las salidas para conseguir el movimiento del motor en un
sentido o en sentido contrario.
c) Que el motor se mueva cómo si el ángulo de paso sería mayor
Para que aparente que el ángulo de paso del motor es cuatro veces mayor, se puede
dejar un retraso (delay) pequeñísimo en tres pasos (el adecuado para conseguir al
menos 1,25 ms, que es el mínimo que admite el motor) y en el cuarto paso
mantener un retraso como el anterior (0,2 seg).
PRÁCTICA 10: LCD
Objetivos
Conocer el funcionamiento de los puertos de entrada-salida del ATMEGA328.
Aplicación a un display LCD

Puntos que hay que desarrollar previamente


 Instrucciones básicas del ARDUINO
 Registros más importantes

Introducción
En esta práctica se usa un visualizador alfanumérico LCD de 2 filas y 16 columnas. El
controlador que usa es HITACHI, y el juego de instrucciones y el mapa de caracteres
correspondientes se pueden ver en el anexo.
Para el montaje de la práctica se emplea el shield preparado, con el visualizador
completamente conectado.
Las líneas que se conectan al módulo ARDUINO son:
Líneas de datos:
D7->Pin 13; D6->Pin 12; D5->Pin 11; D4->Pin 10
Líneas de control:
E>Pin 9; RS->Pin 8

El resto de líneas de control y la alimentación del LCD están conectadas en la placa.

Para facilitar el uso del LCD se utilizan las librerías que trae incluidas arduino.
Ejercicio 1: inicialización del LCD

Desde el IDE de Arduino, abrid el ejemplo “LiquidCrystal-> Hello World”.


La línea de programa:
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
configura las conexiones del LCD. Es necesario cambiar los pines de acuerdo con las
conexiones de la placa prototipo:
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;

Comprobad el correcto funcionamiento del LCD.

Ejercicio 2: contador descendente

Realizad un temporizador de 20 segundos tal que al finalizar la cuenta, encienda el


LED rojo durante 1 segundo. La secuencia se repetirá indefinidamente. En el display
LCD se mostrará el tiempo que falta, en segundos, para que se encienda el LED.

Ejercicio 3: bombo de lotería

Realizad un programa que nos muestre, en el LCD, el número de cinco cifras


ganador del próximo sorteo de la lotería. Las cifras tienen que ser aleatorias (usad el
botón conectado al pin 4 para simular la extracción de cada cifra).

https://www.arduino.cc/en/Reference/LiquidCrystal
PRÁCTICA 11: AD
Objetivos
Conocer el funcionamiento del convertidor analógico-digital del Arduino.

Puntos que hay que desarrollar previamente


 Instrucciones básicas de Arduino
 Registros más importantes

Introducción

El shield ofrece la posibilidad de utilizar 3 entradas analógicas. Una para las teclas de
dirección (KEY), otra para el sensor de temperatura (LM35) y otra entrada de tensión,
proporcionada por el potenciómetro (POT). Las conexiones se indican en la tabla:
Dispositivo Puerto Canal analógico
Sensor temp. LM35 PORTC0 A0
Teclas dirección KEY PORTC1 A1
Potenciómetro POT PORTC2 A2

Ejercicio 1: milivoltímetro

Utilizando el potenciómetro de la tarjeta de expansión (canal analógico 2), elaborad un


programa que muestre en el visualizador LCD el valor en milivolts de la tensión en el cursor
del potenciómetro.
Ejercicio 2: termómetro digital

Utilizando el sensor LM35 del shield (entrada analógica 0), elaborad un programa que
muestre la temperatura en grados centígrados (primera fila del LCD) y en grados
Fahrenheit (segunda fila del LCD). Usad la referencia interna (1.1V) para mejorar la
resolución.

Ejercicio 3: decodificador de teclado

La placa shield incorpora 5 teclas conectadas a una entrada del convertidor AD


(canal 1). El esquema de conexión se muestra en la figura siguiente:

3 A1

5 1 4

Elaborad un programa que nos muestre, en la primera fila del LCD, el número
resultante de la conversión AD al pulsar cada tecla; en la segunda fila, ha de
mostrar el código de la tecla i el símbolo correspondiente, según la tabla adjunta:

Código
Tecla 1 2 3 4 5
Símbolo

Hasta que no se pulse ninguna tecla, se debe visualizar el número 0 y ningún símbolo.
PRÁCTICA 12: Salidas analógicas PWM
Objetivos
Modulación por ancho de pulso (PWM “Pulse Width Modulation”).
Conocer el funcionamiento de la salida analógica de Arduino.

Puntos que hay que desarrollar previamente


 Regulación por modulación de anchura de pulso
 Conversión AD

Parte 1. Control de intensidad de una lámpara


En esta primera parte, se pretende utilizar la salida 3 (que se puede modular PWM)
para modificar el valor medio de la tensión que suministramos a una pequeña luz de
12V y 100mA. La placa de prácticas incorpora un transistor NPN (BD135) en colector
abierto para poder conectar la luz (LOAD) y la alimentación de 12V (VPOW). No
olvidéis conectar el negativo de la fuente de 12V al negativo del Arduino.

El control se hace mediante un potenciómetro. El potenciómetro se conecta a la


entrada analógica 2 de Arduino, usando el que tenemos a la placa de prácticas.

Esquema:

Elaborad el programa en Arduino.

Realizad la simulación del circuito. Conectad el osciloscopio digital a la salida 3.


Para las posiciones del potenciómetro 10%, 50% i 90%, medid con el osciloscopio,
el período de la señal generada (T) y el tiempo a nivel alto (TON).
10% 50% 90%
TON
T

Parte 2. Control PID de la luz ambiente

Con el circuito anterior, la luz se enciende proporcionalmente a la posición del


potenciómetro, con independencia que haya o no luz ambiente. El sistema funciona en lazo
abierto.
Para poder llevar a cabo un control de iluminación, hace falta una realimentación que nos
informe de la luz que hay realmente en el ambiente. Con este objetivo se dispone de una
LDR que se conecta a la entrada A3 de Arduino. El valor de la tensión a la entrada es
proporcional (aproximadamente) a la cantidad de iluminación. El potenciómetro fija, ahora,
el valor de consigna de la cantidad de luz que se quiere conseguir y la señal modulada
PWM tiene que actuar sobre la base del transistor para compensar la falta de luz ambiente,
a fin de que la iluminación total sea la requerida.

Medid el valor de la LDR con las luces del aula encendidas y con las luces del aula
apagadas. Elegíd para R2 un valor comprendido entre los dos obtenidos (con luz y sin luz).

Montad el divisor formado entre la LDR y R2 y medid en A3 el valor de tensión obtenido


con la luz encendida y con la luz apagada. Obtened la ecuación de ajuste necesaria para
que el valor menor sea 0 (con la luz apagada) y el mayor 1023 (con la luz encendida). Esta
ecuación se tiene que utilizar para poder comparar las magnitudes proporcionadas por el
potenciómetro de referencia y por el sensor LDR.

Completad la tabla siguiente:

Vmín (luz Valor digitalizado por el Valor de salida de la


apagada) convertidor AD ecuación
0
Vmáx (luz Valor digitalizado por el Valor de salida de la
encendida) convertidor AD ecuación
1023
Obtened los coeficientes de la ecuación de conversión del valor medido a valor real:

luzreal = a * luzmedida + b

Mecanismo de control

En aplicaciones de control, el primer paso es identificar la variable que queremos controlar


y la variable que podemos modificar. En un ejemplo típico, podríamos querer controlar la
temperatura de un acuario, y para hacerlo podemos actuar sobre el tiempo que un
calentador está encendido.

En nuestro caso, la variable que hay que controlar será la iluminación, y la variable de
actuación será el ciclo de trabajo del PWM.

La idea de cualquier sistema de control es poder calcular una discrepancia (error) entre el
objetivo (iluminación deseada, introducida por el usuario) y la realidad (iluminación
obtenida a través de la LDR). Este error se usa como información de retorno (feedback)
para modificar la variable de control (PWM en nuestro caso).

Un controlador PID es un tipo de control muy usado en la práctica por la sencillez que
tiene, dado que no requiere una caracterización completa del sistema. Se basa a combinar
3 términos (proporcional, integral y diferencial) relacionados con el error con unas
constantes que se pueden determinar a través de un proceso de prueba y error.

En nuestro caso, siendo lref la iluminación deseada, target u objetivo, introducida mediante
el potenciómetro y siendo luz (determinada por el LDR) la iluminación real, el error en un
momento dado será:

A partir de este error, modificamos la variable de actuación sobre la base de la siguiente


expresión:

De momento podemos considerar que “pid” es simplemente un valor que, si es positivo,


indica que se tiene que incrementar la luz, y si es negativo, que hay que reducirla. Nosotros
nos ocuparíamos de convertirlo a un valor, p. ej., entre 0 y 100 para aplicarlo al PWM.

En la fórmula, el primer término es proporcional al error; el segundo, proporcional a su


integral; y el tercero va con su derivada.

La idea es que el primer término trata de reducir el error actual. Si el error es positivo (no
hemos llegado a lref), pid es positivo, por lo cual aumenta la iluminación y se reduce el
error. Si el error es negativo (nos hemos pasado), se invierte el duty y se reduce el PWM, y
nos acercamos de nuevo al objetivo.

El segundo término refleja la influencia del pasado del error: nuestra actuación no será la
misma si puntualmente tenemos un cierto error que si llevamos un rato largo con este
error. En el segundo caso, la actuación será más enérgica.

Finalmente el tercer término refleja el futuro del error (la tendencia que presenta,
capturada en la derivada correspondiente). Imaginad que nos encontramos en 5 unidades
de nuestra iluminación deseada, es decir, que tenemos un error e=5. No es lo mismo si nos
estamos acercando al objetivo (en este caso se está reduciendo el error, derivada negativa)
que si nos estamos alejando (derivada positiva, el error está aumentando). En el primer
caso quizás no hay que hacer casi nada (la misma inercia nos lleva hacia el objetivo),
mientras que en el otro caso está claro que hay que corregir la situación.

En nuestro caso, en vez del continuo descrito antes, tendremos una implementación
discreta. Cada cierto tiempo se mide la iluminación actual y se calcula un término de error:

Para calcular el término de control, el error instantáneo se traduce de forma natural en el


error medido en el instante n, pero para la parte integral y derivativa tendremos que hacer
aproximaciones numéricas:

• La integral se sustituye por una suma de valores anteriores del error. Además, se limita
en el tiempo, sumando los últimos N errores (por ejemplo 5), en vez del historial completo
de errores. Formalmente tendríamos que añadir un término h (el intervalo de tiempo entre
muestras) pero este término (constante) puede ser absorbido por la constante de
integración Ki.

• En cuanto a la estimación numérica de la derivada, la solución más inmediata es


sustituirla por la diferencia entre errores sucesivos, aunque pueden usarse estimaciones
más exactas. De nuevo, el factor h que aparece puede entrar dentro de la constante Kd,
por lo cual no hay que introducirlo explícitamente:

En la variante discreta, el término de control que hay que calcular para actuar sobre el
PWM será, por lo tanto:
Hay que indicar, finalmente, que no hace falta que la frecuencia de toma de medidas sea la
misma que la frecuencia de actuación. Es posible, p. ej., tomar medidas con una frecuencia
de 100 Hz pero solo actuar 20 veces por segundo (20 Hz). En estos ejemplos, por
simplicidad, usamos la misma frecuencia para los dos, por lo cual después de tomar cada
medida, tenemos que calcular el término de control y modificar el ciclo del PWM.

Elaborad un programa que lleve a cabo un control proporcional de la iluminación (en este
apartado, los términos Ki y Kd serían 0).

Añadid la parte integral (5 muestras) y derivada al control. Utilizad constantes Kp=0.1,


Ki=0.01, Kd=0.05.

Montad el sistema y verificad el funcionamiento.

Potrebbero piacerti anche