6
Universidad Nacional
Mayor de San Marcos
(Universidad del Per, DECANA DE AMRICA)
Facultad de Ingeniera Electrnica y
Elctrica
E.A.P. INGENIERIA ELECTRNICA
CONTROL PI DISCRETO DE
ILUMINACION CON ARDUINO
Curso
Ingeniera de control 1
Profesor
Sifuentes
Integrantes
: Zaga Ttito Armando
Tornero Cruzatt Yndira H.
Horario
Lunes de 8 a 10pm
-2014-
08190093
10190031
UNMSM FIEE
Ingeniera de Control 1
CONTROL PI DISCRETO DE ILUMINACION CON ARDUINO
OBJETIVO:
El objetivo del proyecto es controlar el ngulo de disparo de un TRIAC que estar conectado en
serie con el bombillo, mediante el controlador PI, de acuerdo a la intensidad de luz que perciba
un sensor LDR.
PROCESO:
El control PI discreto de iluminacin con Arduino consta de 5 etapas como se muestra en la
Figura 1:
1. Entrada de referencia.
2. Sensor LDR
3. Cruce por cero.
4. Etapa de control (ARDUINO UNO).
5. Etapa de potencia.
microcontrolandos.blogspot.com
REFERENCIA
RESET
1. ENTRADA DE REFERENCIA
RV1
70%
RV1(3)
5k
A0
A1
A2
A3
A4
A5
ANALOG IN
Vamos a disear un circuito como el mostrado en la
Figura con el fin de obtener un voltaje de referencia
que nos represente una variacin dentro del
intervalo 0v a 5v con el cual se regulara la
intensidad de luminosidad a ingresar por el pin A0
por el arduino.
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
ARDUINO UNO R3
Profesor: Sifuentes
Laboratorio No3
1121
DUINO1
UNMSM FIEE
2. SENSOR LDR
Ingeniera de Control 1
R1
U1:B(+IP)
SENSOR
U1:B
4
100k
5
SENSOR
TORCH_LDR
LM324
R2
11
LDR2
100k
R3
R4
10k
20k
El sensor que se utiliza es una fotorresistencia, el cual vara su valor, dependiendo de la
intensidad de luz que se le aplique. La seal de salida alta en caso de baja intensidad de luz, y
baja en caso contrario.
Como la salida del sensor (LDR) varia de 0-2.5v y la entrada del ARDUINO recibe voltajes de
0-5v, amplificamos este valor en un factor de 2 para aprovechar la sensibilidad del ADC del
microcontrolador.
3. CRUCE POR CERO
Se utiliza el siguiente circuito registra el cruce por scero de la seal sinosoidal de entrada. Por
la salida del circuito cruce por cero tenemos una seal rectangular con un ancho de cruce de
0.75ms el cual servira para activar la interrupcion INT1 del arduino.
R9
INVERTIDA
TR1
U1:A
1k
D1
D2
1N4007
1N4007
R7
U2:A
3
1
10k
D4
TRAN-2P2S
1N4007
U2:B
2
RV2
7404
R8
10k
92%
1N4007
INT1
2
11
D3
LM324
7404
R10
10k
1k
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
4. ETAPA DE CONTROL (ARDUINO UNO)
La etapa de control del Arduino se divide en dos partes o dos programas:
- CONTROLADOR:
Dentro del programa controlador tenemos el controlador PI:
L= Pk + Ik
(Pk parte proporcional, Ik parte integral)
Pk= A*Error
Ik= Ik_anterior + B*(Error + Error_anterior)
Donde A=Kp= 1 cte proporcional.
B= Ki*T/2 cte integral.
Para T= 8.33333ms, Ki=0.04
-
ESCALON:
El escaln la rampa dividi en 32 escalones para un tiempo que se introducir por el Compare1a.
Para el tiempo
Calculo del tiempo por el Compare1a:
El programa debe ejecutar una interrupcin por comparacin cada:
t= T- 0.75ms = 7.5833333 ms
(0.75ms ancho del cruce por cero)
t = 7.5833333 ms / (32 escalones) = 0.23698 ms
Frecuencia de Timer1:
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
f = 16 MHz/8 = 2MHz
Ingeniera de Control 1
Valor numrico en Compare1a:
Compare1a = (2MHz)*( 0.23698 ms) = 473.96 redondeando se tiene
Compare1a = 474
Para la amplitud
La amplitud del nivel de la rampa est dividida en 32 escalones al igual que en el tiempo para
ello calculamos para cada escaln
= 1024/(32 escalones) = 32 valores a sumar cada vez que se ejecute el compare1a teniendo
como:
Rampa= Rampa + 32
1. ETAPA DE POTENCIA
En la etapa de potencia se utiliz el MOC3021 para poder controlar el TRIAC con la siguiente
configuracin.
R5
SALIDA
U3
220
R6
U3(A)
TRIAC
330
2
4
MOC3021
L1
220V
U4
Q2025R5
GATE
L
La salida por el pin 9 del Arduino es el que controla la etapa de potencia de acurdo al siguiente
diagrama variando su atenuacin y de esta forma regulando la iluminacin del foco:
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
EL CDIGO DEL PROGRAMA EN BASCOM
Se Utiliz el programa BASCOM AVR con el siguiente cdigo:
'****************************************************************************
***
'
CONTROL DE LUMINOSIDAD CON ARDUINO UNO
(YZ)
'****************************************************************************
***
$regfile = "m328pdef.dat"
del arduino
$crystal = 16000000
del reloj (16MHz)
$baud = 19200
'Indica el admega
Config Portb = Output
salida
Config Portc = Input
entrada
'Puerto B como
'DECLARACION DE VARIABLES
Dim W0 As Word
referencia
Profesor: Sifuentes
'La frecuencia
'Puerto C como
'Voltaje de
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
Dim W1 As Word
sensor
Dim E As Single
diferencia de W0 y W1
Dim E1 As Single
Dim Pk As Single
Proporcional
Dim Ik As Single
Integral actual
Dim Ik1 As Single
Integral anterior
Dim A As Single
Proporcional
Dim B As Single
Integral
Dim L As Word
(Level)
Dim Ldig As Word
digital
Dim Rampa As Word
(Rampa)
'voltaje del
'Error de
'Error anterior
'Componente
'Componente
'Componente
'Ganancia
'Ganancia
'Seal de control
'Seal de control
'Seal escaln
Dim Letra As String * 6
'CONFIGURACION DEL ADC
Config Adc = Single , Prescaler = Auto , Reference = Avcc
del ADC
Start Adc
'CONFIGURACION DE LAS INTERRUPCIONES
Config Timer1 = Counter , Prescale = 8 , Clear Timer = 1
prescala a 1024
Timer1 = 0
timer1 en cero.
On Compare1a Escalon
interrupcion al programa tiempo
Compare1a = 474
de interrupcion
Enable Compare1a
interrupcion de COMPARE1A
Config Int1 = Low Level
mientras se encuentre en bajo
On Int1 Controlador
externa INT1 (Controlador)
Enable Int1
INT1
Enable Interrupts
interrupciones en general
'Configuracion
'Enciende el Adc
'Configura la
'Inicializa el
'Indica la
'Indica el tiempo
'Habilita la
'Interrumpe
'Interrupcin
'Habilitacin
'Habilita las
'CONDICIONES INICIALES
Ik1 = 0
E1 = 0
A = 1
B = 0.000166
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
'PROGRAMA PRINCIPAL
Do
Letra = Str(l)
Print Letra
Wait 1
Loop
End
'INTERRUPCION DEL PRIMER TIEMPO
Controlador:
Rampa = 0
Portb.1 = 0
Disable Compare1a
W0 = Getadc(0)
referencia ADC0
W1 = Getadc(1)
sensro LDR en ADC1
E = W0 - W1
Pk = A *
Ik = E +
Ik = B *
Ik = Ik1
L = Pk +
'Voltaje de
'Voltaje del
E
E1
Ik
+ Ik
Ik
'Hallamos el error
Ik1 = Ik
E1 = E
If L > 1023 Then
L = 1023
Elseif L < 0 Then
L = 0
End If
Enable Compare1a
Timer1 = 0
Return
'CONTROL DEL LEVEL MAX Y MIN
'INTERRUPCION DEL SEGUNDO TIEMPO
Escalon:
If L >= Rampa Then
Portb.1 = 0
End If
If L < Rampa Then
Portb.1 = 1
End If
Rampa = Rampa + 32
Return
EL DIAGRAMA DE FLUJO
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
IMPLEMENTACION
Profesor: Sifuentes
Laboratorio No3
UNMSM FIEE
Ingeniera de Control 1
DUINO1
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
12%
REFERENCIA
A0
A1
A2
A3
A4
A5
DIGITAL (~PWM)
RV1
ANALOG IN
REFERENCIA
1121
ATMEGA328P-PU
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
13
12
11
10
9
8
R5
U3
SALIDA
R6
220
7
6
5
4
3
2
1
0
U3(A)
a
microcontrolandos.blogspot.com
RESET
AREF
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
TRIAC
330
2
4
MOC3021
L1
220V
SALIDA
U4
SALIDA
Q2025R5
ARDUINO UNO R3
5k
GATE
SENSOR
L
INT1
R11
SALIDA
220
R1
U1:B(+IP)
SENSOR
D5
U1:B
LED-RED
100k
5
1
B
C
LM324
R2
100k
2
INT1
SALIDA
SENSOR
TORCH_LDR
11
LDR2
INVERTIDA
R3
R4
10k
20k
R9
TR1
INVERTIDA
1N4007
1N4007
U1:A
1k
R7
10k
TRAN-2P2S
D4
1N4007
U2:B
2
INT1
RV2
7404
R8
10k
83%
1N4007
U2:A
11
D3
D2
D1
LM324
7404
R10
10k
1k
Profesor: Sifuentes
Laboratorio No3