Está en la página 1de 7

ETM 380 – SISTEMAS MICROPROCESADOS

Práctica 4 – Control de relays, motores dc y ac


1. El siguiente circuito de control, permite el encendido y apagado automático de una carga de
220Vac, este caso un foco según las siguientes secuencias:

L1
ARD1
U1
10
COM
1 18
1
2

1B 1C
2 17 220V
ON
Reset BTN

2B 2C
DSW1 3 16
ON

3B 3C
4 15
www.TheEngineeringProjects.com

DIPSW_2 4B 4C
5 14 RL1 V1
OFF

5B 5C
AREF 6 13 5V VSINE
6B 6C
7 12
13 7B 7C
4
3

PB5/SCK 8 11
12 8B 8C
RESET PB4/MISO
11
~PB3/MOSI/OC2A ULN2803
10
VCC ~PB2/SS/OC1B
9
GND ~ PB1/OC1A 8
PB0/ICP1/CLKO
ATMEGA328P-PU
1121

7
ANALOG IN

PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
A1 ~ PD5/T1
PC1/ADC1 4
A2 PD4/T0/XCK
PC2/ADC2 3
A3
PC3/ADC3 ~ PD3/INT1 2
A4 PD2/INT0
PC4/ADC4/SDA 1
A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD

ARDUINO UNO

Componentes utilizados: 7SEG-COM-CAT-GRN, ARDUINO UNO, DIPSW_2, LAMP, RELAY, RES, ULN2803, VSINE.
void setup() {
for(int i=2;i<=9;++i){
pinMode(i, OUTPUT);
}
pinMode(14, INPUT);
pinMode(15, INPUT);
}

void loop() {
byte entrada;
entrada = leeDipSwitch();
muestraDisplay(entrada);
switch(entrada){
case 0:
ciclo0();
break;
case 1:
ciclo1();
break;

1
case 2:
ciclo2();
break;
case 3:
ciclo3();
break;
}
}

byte leeDipSwitch()
{
byte valor, aux;
aux = digitalRead(14);
valor = digitalRead(15);
valor = valor << 1;
valor = valor | aux;
valor = valor & 0x03;
return valor;
}

void muestraDisplay(int num)


{
byte numero[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};
byte pins[7] = {8, 7, 6, 5, 4, 3, 2};
byte mask = 0x01, aux;
aux = numero[num];
for(int i = 0; i < 7; ++i){
if(aux & mask)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
mask = mask << 1;
}
}

void ciclo0()
{
digitalWrite(9, HIGH);
delay(500);
digitalWrite(9, LOW);
delay(500);
}

void ciclo1()
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(500);
}

void ciclo2()
{
digitalWrite(9, HIGH);
delay(1500);
digitalWrite(9, LOW);
delay(1500);
}

void ciclo3()
{
digitalWrite(9, HIGH);
delay(2000);
digitalWrite(9, LOW);
delay(2000);
}

2
2. El siguiente circuito implementa el control de un motor DC, según los siguientes ciclos de trabajo:

16 8 U1
2 3
ARD1 IN1 VSS VS OUT1
7 6
IN2 OUT2
1
EN1
1
2

9
ON
Reset BTN

EN2
DSW1 10 11
ON

IN3 OUT3
15 14
www.TheEngineeringProjects.com

DIPSW_2 IN4 GND GND OUT4


OFF

AREF
L293D
13
4
3

PB5/SCK
12
RESET PB4/MISO
11
~PB3/MOSI/OC2A
10
VCC ~PB2/SS/OC1B
9
GND ~ PB1/OC1A 8
PB0/ICP1/CLKO
ATMEGA328P-PU
1121

7
ANALOG IN

PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
A1 ~ PD5/T1
PC1/ADC1 4
A2 PD4/T0/XCK
PC2/ADC2 3
A3
PC3/ADC3 ~ PD3/INT1 2
A4 PD2/INT0
PC4/ADC4/SDA 1
A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD

ARDUINO UNO

(7SEG-COM-CAT_GRN, ARDUINO UNO, DIPSW_2, L293D, MOTOR, RES)

void setup() {
for(int i=2;i<=10;++i){
pinMode(i, OUTPUT);
}
pinMode(14, INPUT);
pinMode(15, INPUT);
}

void loop() {
byte entrada;
entrada = leeDipSwitch();
muestraDisplay(entrada);
switch(entrada){
case 0:
ciclo0();
break;
case 1:
ciclo1();
break;
case 2:
ciclo2();
break;
case 3:
ciclo3();
break;
}
}

3
byte leeDipSwitch()
{
byte valor, aux;
aux = digitalRead(14);
valor = digitalRead(15);
valor = valor << 1;
valor = valor | aux;
valor = valor & 0x03;
return valor;
}

void muestraDisplay(int num)


{
byte numero[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};
byte pins[7] = {8, 7, 6, 5, 4, 3, 2};
byte mask = 0x01, aux;
aux = numero[num];
for(int i = 0; i < 7; ++i){
if(aux & mask)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
mask = mask << 1;
}
}

void ciclo0()
{
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}

void ciclo1()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
}

void ciclo2()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
delay(2000);
digitalWrite(9, LOW);
delay(2000);
}

void ciclo3()
{
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
delay(4000);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
delay(4000);
}

3. El siguiente circuito implementa el control de un motor paso a paso monopolar, según los
siguientes ciclos de trabajo:

4
16 8 U1
2 3
ARD1 IN1 VSS VS OUT1
7 6
IN2 OUT2
1
EN1
1
2

9
ON
Reset BTN

EN2
DSW1 10 11
ON

IN3 OUT3
15 14
www.TheEngineeringProjects.com

DIPSW_2 IN4 GND GND OUT4 +88.8


OFF

AREF
L293D
13
4
3

PB5/SCK
12
RESET PB4/MISO
11
~PB3/MOSI/OC2A
10
VCC ~PB2/SS/OC1B
9
GND ~ PB1/OC1A 8
PB0/ICP1/CLKO
ATMEGA328P-PU
1121

7
ANALOG IN

PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
A1 ~ PD5/T1
PC1/ADC1 4
A2 PD4/T0/XCK
PC2/ADC2 3
A3
PC3/ADC3 ~ PD3/INT1 2
A4 PD2/INT0
PC4/ADC4/SDA 1
A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD

ARDUINO UNO

(7SEG-COM-CAT_GRN, ARDUINO UNO, DIPSW_2, L293D, MOTOR-STEPPER, RES)


#include <Stepper.h>
// Angulo de paso del motor 3º, con 120 pasos completa una revolución
#define STEPS 120

// Cremos un objeto de tipo Stepper el cual modela un mpp


Stepper mpp(STEPS, 9, 11, 10, 12);

void setup() {
for(int i = 0; i <= 8; ++i){
pinMode(i, OUTPUT);
}
pinMode(14, INPUT);
pinMode(15, INPUT);
mpp.setSpeed(10);
}

void loop() {
byte entrada;
entrada = leeDipSwitch();
muestraDisplay(entrada);
switch(entrada){
case 0:
ciclo0();
break;
case 1:
ciclo1();
break;
case 2:

5
ciclo2();
break;
case 3:
ciclo3();
break;
}
}

byte leeDipSwitch()
{
byte valor, aux;
aux = digitalRead(14);
valor = digitalRead(15);
valor = valor << 1;
valor = valor | aux;
valor = valor & 0x03;
return valor;
}

void muestraDisplay(int num)


{
byte numero[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};
byte pins[7] = {8, 7, 6, 5, 4, 3, 2};
byte mask = 0x01, aux;
aux = numero[num];
for(int i = 0; i < 7; ++i){
if(aux & mask)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
mask = mask << 1;
}
}

void ciclo0()
{
return;
}

void ciclo1()
{
mpp.step(STEPS);
}

void ciclo2()
{
mpp.step(-STEPS);
}

void ciclo3()
{
mpp.step(3*STEPS);
mpp.step(-3*STEPS);
}

4. El siguiente circuito implementa el control de un motor paso a paso bipolar, según los siguientes
ciclos de trabajo:

6
16 8 U1
2 3
ARD1 IN1 VSS VS OUT1
7 6
IN2 OUT2
1
EN1

+88.8
1
2

9
ON
Reset BTN

EN2
DSW1 10 11
ON

IN3 OUT3
15 14
www.TheEngineeringProjects.com

DIPSW_2 IN4 GND GND OUT4


OFF

AREF
L293D
13
4
3

PB5/SCK
12
RESET PB4/MISO
11
~PB3/MOSI/OC2A
10
VCC ~PB2/SS/OC1B
9
GND ~ PB1/OC1A 8
PB0/ICP1/CLKO
ATMEGA328P-PU
1121

7
ANALOG IN

PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
A1 ~ PD5/T1
PC1/ADC1 4
A2 PD4/T0/XCK
PC2/ADC2 3
A3
PC3/ADC3 ~ PD3/INT1 2
A4 PD2/INT0
PC4/ADC4/SDA 1
A5 TX PD1/TXD
PC5/ADC5/SCL 0
RX PD0/RXD

ARDUINO UNO

(7SEG-COM-CAT_GRN, ARDUINO UNO, DIPSW_2, L293D, MOTOR-BISTEPPER, RES)

El software es el mismo que el del anterior programa.


PRÁCTICA
1. Implementar todos los anteriores circuitos en el simulador, definiendo sus propios
ciclos de trabajo. Para la presentación mostrar representados en papel los ciclos
implementados.
2. Implementar uno de los circuitos del punto anterior, definiendo sus propios ciclos de
trabajo.

También podría gustarte