Professional Documents
Culture Documents
MóduloTecnológico
V: PLC y Microcontroladores CBTis 4
Manual de Prácticas
Módulo V
Por:
Ing. José Guillermo Palacios Mauricio
Índice de contenido
Submódulo II............................................................................................................................................................ 3
Práctica No. 1. Configuración básica............................................................................................................. 4
Práctica No. 2. Lectura de Entradas............................................................................................................... 7
Práctica No. 3. Operaciones Lógicas........................................................................................................... 13
Práctica No. 4. Ciclos...................................................................................................................................... 16
Práctica No. 5. E/S Análogas....................................................................................................................... 18
Práctica No. 6. Motor de CD......................................................................................................................... 25
Práctica No. 7. Motor de CD Puente H....................................................................................................... 27
Práctica No. 8. Manejo LCD.......................................................................................................................... 31
Práctica No. 9. Motores a Pasos................................................................................................................... 38
Práctica No. 10. Servomotores RC............................................................................................................... 44
Práctica No. 11. Display 7 Segmentos........................................................................................................ 46
Práctica No. 12. Matriz de LEDs................................................................................................................... 50
Práctica No. 13. Comunicación Serial.......................................................................................................... 53
Prácticas
Submódulo II
Objetivo
Conocer la configuración básica de conexión del Arduino a través del uso de los puertos de Salida, así
como la simulación de dichos circuitos en el software Proteus.
Material
1. Arduino Uno®
2. PC (Arduino 1.0, Proteus)
3. Protoboard y cables para conexiones
4. Leds y botones pulsadores.
Desarrollo
A) Realizar el programa y el circuito que permita encender un led conectado a pin D13 del
Arduino (Ilustración 2). Realizar la simulación correspondiente en Proteus.
B) Para el mismo circuito mostrado en la Ilustración 2, realizar un programa que permita que el
led encienda y apague con una frecuencia de 2 Hz. Realizar además la simulación
correspondiente en Proteus.
void setup()
{
// Se utiliza doble diagonal para indicar algun comentario
// Es el área de configuración de las entradas y salidas, variables, constante, entre otras cosas.
}
void loop()
{
// El código dentro de esta estructura se repetirá indefinidamente.
void loop() {
digitalWrite(13, HIGH);// Enciende el LED
}
void loop() {
digitalWrite(13, HIGH);// Enciende el LED
delay(1000); // Pausa en el programa de 1 seg.
digitalWrite(13, LOW); // Apaga el LED
delay(1000); // Pausa en el programa de 1 seg.
}
Simulación en Proteus
Para la simulación en Proteus armar el circuito mostrado en la Ilustración 3, así mismo modificar las
propiedades como se indican en la Ilustración 4.
XTAL1
22pF
CRYSTAL
XTAL2
22pF
U1
D13
2 14
D0 PD0/RXD/PCINT16 PB0/ICP1/CLKO/PCINT0 D8
3 15
D1 PD1/TXD/PCINT17 PB1/OC1A/PCINT1 D9
4 16
D2 PD2/INT0/PCINT18 PB2/SS/OC1B/PCINT2 D10
5 17
D3 PD3/INT1/OC2B/PCINT19 PB3/MOSI/OC2A/PCINT3 D11
6 18
D4 PD4/T0/XCK/PCINT20 PB4/MISO/PCINT4 D12
11 19
D5 PD5/T1/OC0B/PCINT21 PB5/SCK/PCINT5 D13
220
12 9
D6 PD6/AIN0/OC0A/PCINT22 PB6/TOSC1/XTAL1/PCINT6 XTAL1
13 10
D7 PD7/AIN1/PCINT23 PB7/TOSC2/XTAL2/PCINT7 XTAL2
21 23
AREF PC0/ADC0/PCINT8 A0
20 24
VCC AVCC PC1/ADC1/PCINT9 A1
25
PC2/ADC2/PCINT10 A2
26
PC3/ADC3/PCINT11 A3
27
PC4/ADC4/SDA/PCINT12 A4
28
PC5/ADC5/SCL/PCINT13 A5
1
PC6/RESET/PCINT14 VCC
ATMEGA328P
Objetivo
Emplear técnicas para la lectura y manipulación de datos de entrada digitales en Arduino y simulación
con Proteus.
Material
1. Arduino Uno®
2. PC (Arduino 1.0, Proteus)
3. Protoboard y cables para conexiones
4. 2 leds rojos, 2 leds verdes, 2 leds amarillos y 2 botones pulsadores.
5. 6 Resistencias de 330Ω y 2 de 10 kΩ
Funciones a utilizar
• pinMode(), digitalRead(); delay(); if(), variables.
Desarrollo
A) Realizar el programa y el circuito que permita encender un led conectado a pin D10 al momento que
se presiona un botón conectado al pin D2, tal como lo muestran la Ilustración 5 y la Ilustración 6.
Realizar la simulación correspondiente en Proteus.
Ilustración 5: Esquemático
void setup()
{
pinMode(LR1,OUTPUT);
pinMode(BP1,INPUT);
}
void loop()
{
if(digitalRead(BP1)==1)
{
digitalWrite(LR1,HIGH);
}
else
{
digitalWrite(LR1,LOW);
}
}
B) Cambie el programa del inciso anterior de tal manera que ahora se asigne el valor de la lectura del
botón a una variable y sea esta última la que se compare.
void setup()
{
pinMode(LR1,OUTPUT);
pinMode(BP1,INPUT);
}
void loop()
{
edoBP1=digitalRead(BP1);
if(edoBP1==Presionado)
{
digitalWrite(LR1,HIGH);
}
else
{
digitalWrite(LR1,LOW);
}
}
C) Diseñe un programa y circuito que permita el control de dos semáforos los cuales tendrán la siguiente
secuencia:
TRAFFIC LIGHTS
D) Diseñe un programa que permita controlar los semáforos para el cruce de un peatón en una calle de
doble sentido. La Ilustración 8 muestra el esquema a controlar.
Al no haber un peatón que quiera cruzar la calle, tanto la luz de color roja del peatón como la luz de
color verde para los vehículos, deberán de estar encendidas.
Cuando el peatón presiona el botón pulsador, inicia la secuencia, la luz verde del semáforo
permanece encendida por 3 segundos más, después de los cuales la señal del vehículo cambia a
amarillo. Después de 1 segundo, la señal del vehículo cambia a rojo, y la señal del peatón cambia a
verde en el mismo tiempo.
Después de 5 segundos la señal del peatón, que ha estado en verde, cambia a color rojo y después
de 2 segundos, la señal de los vehículos regresa a la condición previa de presionar cualquiera de los
dos botones. La secuencia se repite cuando se presiona de nueva cuenta cualquiera de los botones
pulsadores.
Semáforo peatonal
Alto
Siga
Notas:
• Utilizar operadores relacionales.
• La disposición de cuales salidas y entradas usar, queda a elección del programador.
Puntos extra
• En el ejercicio C. Hacer que la luz de color verde parpadee una o dos veces antes de cambiar
a color amarillo.
Objetivo
Emplear técnicas para la lectura y manipulación de datos de entrada, así como la utilización de
operadores lógicos a nivel bit y a nivel relacional.
Material
• Arduino Uno® • 1 buzzer 5V
• PC (Arduino 1.0, Proteus) • 1 Resistencia de 330Ω
• Protoboard y cables para conexiones • 5 Botones pulsadores
• 1 LED • 5 Resistencias de 10 kΩ
Funciones a utilizar
• pinMode(), digitalRead(); delay(); if(), Operadores lógicos, variables.
Desarrollo
A) Diseñe y simule un programa que permita encender de una manera intermitente un buzzer utilizando
operadores lógicos a nivel bit. La Ilustración 9 muestra el circuito necesario.
boolean edoBuzzer=0;
void setup()
{
pinMode(Buzzer,OUTPUT);
}
void loop()
{
edoBuzzer=edoBuzzer^1; //Operador XOR
digitalWrite(Buzzer, edoBuzzer);
delay(500);
}
B) Realizar el programa y el circuito que permita encender una alarma, mostrado en la Ilustración 11,
según las siguientes condiciones:
2. La alarma deberá de encenderce sólo cuando el SW1 y el SW5 se abran, los otros interrptores
deberán de estar cerrados. Una lampára deberá conmutar al mismo tiempo que la alarma se
activa, es decir, cuando la alarma se enciende, la lámpara se apaga y cuando la lámpara se
apaga, la lámpara se enciende.
3. La alarma deberá de activarse cuando cualquiera de los interruptores SW1, SW2, SW3 o SW4
se abran y deberá apagarse exclusivamente hasta que se abra el interruptor SW5, es decir, este
último será la llave para activar o desactivar la alarma.
4. Diseñar un circuito que permita la acitvación en secuencia de una alarma o una carga, esto es, que
sólo se deberá de encender la carga, cuando se hayan cerrado los interruptores en la siguiente
secuencia: SW1 » SW2 » SW3
Objetivo
Emplear el uso de la estructura de repetitiva “for” para la creación de ciclos controlados.
Material
• Arduino Uno® • 1 Resistencia de 10 kΩ
• PC (Arduino 1.0, Proteus) • 1 Botón pulsador
• Protoboard y cables para conexiones • 8 Resistencias de 330Ω
• 8 LED
Funciones a utilizar
• pinMode(), digitalWrite(), digitalRead(); delay(); if(), for(), Operadores lógicos, variables.
Desarrollo
A) Arme el circuito mostrado tanto en la Ilustración 13 como en la Ilustración 14, tanto físicamento como
en Proteus.
Puntos extra
• Para cualquiera de los problemas anteriores. Agregar un botón pulsador y modificar el
programa, para que sólo mientras el botón sea presionado la secuencia siga su curso normal.
Cuando se deje de presionar el botón se detendrá la secuencia.
Una pista: utilizar if().
• Igualmente, para cualquiera de los problemas anteriores, modificar el programa para que el
botón pueda ser utilizado para controlar la frecuencia de la secuencia.
Una pista: Utilizar un contador y un tipo de variable que no utilice valores negativos y pueda
contener la cantidad de tiempo para la pausa deseada.
Objetivo
Utilizar tanto el convertidor ADC como la señal PWM que provee el microcontrolador para
interacturar con sensores que tienen un rango en su señal de sensado, así como con la conversión de un valor
en una magnitud de voltaje.
Material
• Arduino Uno® • 10 LEDs con
• PC (Arduino 1.0, Proteus) • 10 Resistencias de 330Ω
• Protoboard y cables para conexiones • 2 Potenciómetros 10kΩ
Funciones a utilizar
• analogRead(), analogWrite(), for(), corrimiento (<<), Serial.
Desarrollo
Arme el circuito mostrado tanto en la Ilustración 15, tanto físicamento como en Proteus. El
elemento virtual terminal físicamente será utilizar el puerto usb para monitorear el canal A0.
#define LED 13
int valorA0=0;
void setup()
{
pinMode(LED,OUTPUT);
}
void loop()
{
valorA0=analogRead(A0);
digitalWrite(LED,HIGH);
delay(valorA0);
digitalWrite(LED,LOW);
delay(valorA0);
}
Describa el funcionamiento de este programa. Asigne comentarios a cada línea del programa.
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
int valorA0=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
valorA0=analogRead(A0);
Serial.println(valorA0);
delay(200);
}
Al correr el programa en el Arduino, será necesario visualizar el puerto serial, para lo cual se
utilizará la herramienta de la IDE Arduino, la cual se encuentra en el menú “Tools” y se llama “Serial
Monitor”. La Ilustración 17 muestra dicha herramienta.
Describa el funcionamiento del programa. Asigne comentarios a cada línea del programa.
Anote al menos 4 valores de voltaje y su correspondiente valor en el Arduino.
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
void setup()
{
Serial.begin(9600); //Habilita comunicación serial a 9600 bps
for(int pin=4; pin<=13; pin++)
{
pinMode(pin,OUTPUT);
}
}
void loop()
{
valorA0=analogRead(A0);
aux=1;
for(int pin=4; pin<=13; pin++)
{
if((valorA0&aux)>0)
{
digitalWrite(pin,HIGH);
}
else
{
digitalWrite(pin,LOW);
}
aux=aux<<1;
}
Serial.println(valorA0);
delay(100);
}
Describa el funcionamiento del programa. Asigne comentarios a cada línea del programa.
Compare los valores en los LEDs y en el puerto serie.
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
D) Para probar ahora la salida análgo, tipo PWM, que contiene el Arduino, arme el circuito mostrado en
Ilustración 18 y cargue el sigiente progama:
#define pwm 3
void setup()
{
}
void loop()
{
for(int i=0; i<=255; i++)
{
analogWrite(pwm,i);
delay(100);
}
}
Describa el funcionamiento del programa. Asigne comentarios a cada línea del programa.
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
#define pwm 3
int valA0;
int aux;
void setup()
{
Serial.begin(9600);
}
void loop()
{
valA0=analogRead(A0);
aux=map(valA0,0,1023,0,255);
analogWrite(pwm,aux);
Serial.println(aux);
delay(10);
}
Describa el funcionamiento del programa. Asigne comentarios a cada línea del programa.
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Concer el funcionamiento básico de un motor CD, así como concer el arranque, paro y control de
velocidad, por medio de una serie ejercicios y la aplicación de los conceptos aprendidos en las prácticas
anteriores.
Material
• Arduino Uno® • 1 MOSFET IRFI9Z34
• PC (Arduino 1.0, Proteus) • 1 Resistencia 1kΩ
• Protoboard y cables para conexiones • 1 Diodos 1N4001(G)
• Motor de CD < 2Amp. • 2 LEDs Verde y Rojo
• 1 Transistor TIP120 • 2 Resistencias 330 Ω
Funciones a utilizar
• #define, digitalRead(), digitalWrite(), analogRead(), analogWrite(), variables.
Desarrollo
Arme el circuito mostrado en la Ilustración 20, tanto físicamento(según transistor o MOSFET) como
en Proteus.
A) Diseñar un programa que permita controlar el arranque de un motor de CD, por medio de un botón
pulsador. Mientras esté presionado el botón, el motor deberá de estar encendido también. Al soltar el
botón, se apagará el motor.
B) Diseñar un programa que permita el arranque y paro de un motor con un sólo botón, es decir, al
presionar el botón, y si el motor esta apagado, el motor deberá de encender. Al soltar el botón se
quedará encendido el motor. Si se presiona nuevamente el botón, y si el motor está encendido, este
deberá de apagarse. Al soltar el botón se mandentrá apagado.
C) Diseñe un programa que permita controlar la velocidad del motor por medio de dos botones
pulsadores, es decir, el botón S2 incrementa la velocidad hasta llegar al 100% y el botón S3
decrementa la velocidad hasta llegar a 0%. Utilizar un osciloscopio para corroborar la señal de
control aplicada al MOSFET o al Transistor.
D) Modifique el programa del inciso anterior, pero ahora controle la velocidad por medio de un
potenciómetro.
Punto extra
• Realizar el inciso E, pero para dos motores con control independiente de Arranque, Paro y Velocidad.
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Controlar el giro de un motor de CD, por medio de un puente H, diseñado con transistores y/o
MOSFETs, así como con ayuda del uso de un circuito integrado LM298.
Material
• Arduino Uno® • 1 LM298
• PC (Arduino 1.0, Proteus) • 2 LEDs
• Protoboard y cables para conexiones • 2 Resistencias 330 Ω
• Motor de CD < 2Amp.
Funciones a utilizar
• #define, digitalRead(), digitalWrite(), analogRead(), analogWrite(), variables.
Desarrollo
Arme el circuito mostrado en la Ilustración 21 en Proteus.
A) Para el circuito mostrado en Ilustración 21, diseñe un programa que permita la siguiente secuencia del
motor:
B) Diseñe un programa que permita el control del circuito mostrado en Ilustración 21mediante 3 botónes,
los cuales harán lo que indica la Ilustración 22.
Botón Botón Botón
Encendido-Apagado Giro CW Giro CCW
Agregue los leds que sean necesarios para indicar el sentido de giro, los cuales, al estár encendidos,
harán notar que esta encendido el motor.
El giro inicial, al encender el motor, quedará definido por el programador. Si el motor está apagado,
los botones de cambio de giro, no deberán de encender el motor.
C) Arme físicamente y en Proteus el siguiente circuito, considere las terminales provenientes del Arduino.
La Ilustración 24 muestra la configuración básica para el control de un motor, es decir, utiliza sólo la
mitad de la capacidad del L298.
D) Diseñe un programa que permita el control del MOTOR 1 con la siguiente secuencia:
F) Diseñe un programa que permita el control de ambos motores, según las siguientes condiciones:
Punto extra
Probar sobre alguno de los tanques que se encuentran en el taller.
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Concer el funcionamiento básico de una pantalla LCD de 16x2 líneas. Utilizarla tanto para mensajes
como para valores de variables.
Material
• Arduino Uno® • Sensor temp. LM35
• PC (Arduino 1.0, Proteus) • Pot. 10kΩ
• Protoboard y cables para conexiones • 1 LCD 16x2 Líneas
Funciones a utilizar
• #define, digitalRead(), digitalWrite(), analogRead(), variables.
Para pode hacer uso de esta pantalla en Arduino utilizaremos la librería <LiquidCrystal.h>, que
perimite de una manera fácil poder controlar la escritura de nuestra pantalla. Para mayor información ir
al sitio: http://arduino.cc/es/Reference/LiquidCrystal
• LiquidCrystal() • noBlink()
• begin() • display()
• clear() • noDisplay()
• home() • scrollDisplayLeft()
• setCursor() • scrollDisplayRight()
• write() • autoscroll()
• print() • noAutoscroll()
• cursor() • leftToRight()
• noCursor() • rightToLeft()
• blink() • createChar()
Desarrollo
Arme el circuito mostrado en la Ilustración 27, tanto físicamente como en Proteus.
void setup() {
lcd.begin(16, 2); // Se establece el número de columnas y renglones
lcd.print("Hola CBTis 4"); //Imprime el mensaje de "Hola CBTis 4" en el punto (Col-0 , Renglón-0);
}
void loop() {
// Posicionamos el cursor en la columna 0 y renglón 1
// Nota: la posición 1, es el segundo renglón, empezando la cuenta en 0
lcd.setCursor(0, 1);
boolean pos=0;
void setup() {
lcd.begin(16, 2); // Se establece el número de columnas y renglones
pinMode(8, INPUT);
}
void loop() {
for(int i=0; i<=15; i++)
{
pos=digitalRead(8);
lcd.setCursor(i, pos);
lcd.print("CBtis 4");
delay(200);
lcd.clear();
}
}
#define POT A0
#define LM35 A1
int val_analog;
float temp, volt;
void setup() {
lcd.begin(16, 2); // Se establece el número de columnas y renglones
lcd.print("Voltaje= ");
lcd.setCursor(0, 1);
lcd.print("Temp.= ");
}
void loop() {
val_analog=analogRead(POT);
delay(20);
volt=0.00488*val_analog; // --5/1023--
lcd.setCursor(9, 0);
lcd.print(volt,2); //(variable,base o número de decimales)
lcd.print(" V");
val_analog=analogRead(LM35);
delay(20);
temp=0.488*val_analog; //Factor de conversión 100 C = 1 Volt
lcd.setCursor(7, 1);
lcd.print(temp,1); //(variable,base o número de decimales)
lcd.print(" C");
}
Punto extra
• Diseñe un control ON-OFF con histéresis con los rangos MAX y MIN ajustables desde el
programa o desde dos potenciómetros. El diagrama requerido lo muestra la Ilustración 28.
• Diseñe un control Proporcional de temperatura. La señal de referencia se dará por medio de
un potenciómetro. En el LCD se desplegarán tanto la señal de referencia como la señal actual
de temperatura del sistema.
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Concer el funcionamiento básico de los motores a pasos, específicamente los motores UNIPOLARES,
utilizando la configuración de 1 Fase y 2 Fases.
Material
• Arduino Uno® • 2 Motores unipolares paso a paso
• PC (Arduino 1.0, Proteus) • ULN2803
• Protoboard y cables para conexiones
Funciones a utilizar
• #define, digitalRead(), digitalWrite(), variables.
Desarrollo
A) Control con Transistores
• Probar el siguiente programa que permite el control básico de un motor a pasos unipolar:
#define A 8
#define Ap 9
#define B 10
#define Bp 11
int retardo=100;
int paso=A;
void setup()
{
pinMode(A,OUTPUT);
pinMode(Ap,OUTPUT);
pinMode(B,OUTPUT);
pinMode(Bp,OUTPUT);
}
void loop()
{
digitalWrite(paso,HIGH);
delay(retardo);
digitalWrite(paso,LOW);
paso++;
if(paso>Bp)
{
paso=A;
}
}
• Ahora el siguiente programa permite el control del motor, dándo cierta cantidad de pasos.
Cargar el siguiente programa:
#define A 8
#define Ap 9
#define B 10
#define Bp 11
int retardo=100;
int npasos=10;
void setup()
{
pinMode(A,OUTPUT);
pinMode(Ap,OUTPUT);
pinMode(B,OUTPUT);
pinMode(Bp,OUTPUT);
}
void loop()
{
digitalWrite(bobina,HIGH);
delay(retardo);
digitalWrite(bobina,LOW);
bobina++;
if(bobina>Bp) bobina=A;
np++;
if(np==npasos)
{
np=0;
delay(1000);
}
B) Control con CI
Probar el siguiente programa, que utiliza una función y permite controlar dos motores a
pasos, mediante el uso de un circuito integrado ULN2803, el cual tiene 8 arreglos que permiten
controlar cargas de hasta 500mA por cada salida.
#define A 8
#define Ap 9
#define B 10
#define Bp 11
void setup()
{
for(char i=2; i<=9; i++) pinMode(i,OUTPUT);
for(char i=10; i<=12; i++) pinMode(i,INPUT);
}
void loop()
{
m=m1|m2;
motores(m);
dir=digitalRead(12)+digitalRead(11)*2+digitalRead(10)*4;
switch (dir){
case 0: m1=m1>>1|m1<<3;
//m2=m2<<1|m2>>3;
break;
case 1: m1=m1<<1|m1>>3;
//m2=m2<<1|m2>>3;
break;
case 2: //m1=m1>>1|m1<<3;
m2=m2>>1|m2<<3;
break;
case 3: //m1=m1>>1|m1<<3;
m2=m2<<1|m2>>3;
break;
case 4: m1=m1>>1|m1<<3;
m2=m2>>1|m2<<3;
break;
case 5: m1=m1<<1|m1>>3;
m2=m2<<1|m2>>3;
break;
case 6: m1=m1>>1|m1<<3;
m2=m2<<1|m2>>3;
break;
case 7: m1=m1<<1|m1>>3;
m2=m2>>1|m2<<3;
break;
}
m1=m1&0x0F;
m2=m2&0xF0;
delay(retardo);
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Concer el funcionamiento básico de los servomotores de radio control o modelismo, por medio de una
sencilla práctica para el control de movimiento del mismo.
Material
• Arduino Uno® • Protoboard y cables para conexiones
• PC (Arduino 1.0, Proteus) • 1 Servomotor RC
Funciones a utilizar
• #define, librería Servo.h
Desarrollo
Arme el circuito mostrado en la Ilustración 31 , tanto físicamente como en Proteus.
#include <Servo.h>
void setup()
{
miservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
miservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
miservo.write(pos);
delay(15);
}
}
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Estudiar y aplicar el uso de los display de 7 segmentos tanto para mostrar números de uno o de dos
dígitos.
Material
• Arduino Uno® • 8 Resistencias de 330Ω
• PC (Arduino 1.0, Proteus) • 2 Resistencias de 1kΩ
• Protoboard y cables para conexiones • 1 Transistor BC547(NPN)
• 2 Display de 7 segmentos de cátodo • 1 Transistor BC557(PNP)
común.
Desarrollo
A) Arme el circuito mostrado en la Ilustración 33, tanto físicamente como en Proteus.
El siguiente programa permite mostrar los dígitos del 0 al 9 en el display de 7 segmentos. Probarlo
tanto en Proteus como en el Arduino físicamente:
// 0 1 2 3 4 5 6 7 8 9
int disp[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
void setup()
{
for(int pin=7; pin<=13; pin++)
{
pinMode(pin,OUTPUT);
}
}
void loop()
{
for(int i=0;i<=9;i++)
{
imprimir(i);
delay(500);
}
}
// 0 1 2 3 4 5 6 7 8 9
int disp[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
int valorA0=0;
float voltaje;
int temp,u,d=0;
void setup()
{
for(int pin=6; pin<=13; pin++)
{
pinMode(pin,OUTPUT);
}
}
void loop()
{
valorA0=analogRead(A0);
voltaje=valorA0*0.00488;
temp=voltaje*100;
d=temp/10;
u=temp%10;
imprimir(u); //Unidades
digitalWrite(6,HIGH);
delay(5);
imprimir(d); //Decenas
digitalWrite(6,LOW);
delay(5);
}
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Estudiar y aplicar el uso de la matriz de leds 8x8, utilizada para desplegar mensajes alfanuméricos.
Material
• Arduino Uno® • 1 Matriz de LEDs de 8x8
• PC (Arduino 1.0, Proteus) • 8 Resistencias de 330Ω
• Protoboard y cables para conexiones
Desarrollo
A) Arme el circuito mostrado en la Ilustración 35, tanto físicamente como en Proteus.
//Valores individuales
const unsigned char n[10]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x00,0xFF};
unsigned char aux=0; //Variables para enmascaramiento
void setup() {
for (char Pin = 0; Pin < 8; Pin++)
{
pinMode(col[Pin], OUTPUT); // Declaración de salidas
pinMode(row[Pin], OUTPUT);
digitalWrite(row[Pin], LOW); //Poniéndo todas las filas en bajo
}
}
void loop() {
// Filas
for(int i=0;i<8;i++)
{
valor=~valor;
RC(n[i],valor);
delay(100);
}
//Diagonal
for(int i=0;i<8;i++)
{
RC(n[i],~n[i]);
delay(100);
}
//Columnas
for(int i=0;i<8;i++)
{
RC(0x00,~n[i]);
delay(100);
}
}
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
Objetivo
Estudiar
Material
• Arduino Uno® • 2 Resistencias de 330Ω
• PC (Arduino 1.0, Proteus) • 1 Motor de CD
• Protoboard y cables para conexiones • 1 Puente H
• 2 LEDs
Desarrollo
char val='0';
void setup()
{
Serial.begin(9600);
Serial.println("(val) (val,DEC) (val,HEX) (val,OCT) (val,BIN)");
}
void loop()
{
Serial.print(" ");
Serial.print(val);
Serial.print(" ");
Serial.print(val,DEC);
Serial.print(" ");
Serial.print(val,HEX);
Serial.print(" ");
Serial.print(val,OCT);
Serial.print(" ");
Serial.println(val,BIN);
delay(250);
val++;
}
B) Rediseñe el programa anterior para ahora utilizar “int val=48” en lugar de “char val='0'”.
Observar y comentar el resultado.
#define LED 13
void setup()
{
pinMode(LED,OUTPUT);
Serial.begin(9600);
void loop()
{
//Revisa que haya al menos se haya recibido un caracter en el puerto serie
if(Serial.available())
{
char ch=Serial.read();
if(ch=='H')
{
digitalWrite(LED,HIGH);
}
else if(ch=='L')
{
digitalWrite(LED,LOW);
}
int valor;
void setup()
{
Serial.begin(9600);
Serial.print("Introduce valor del PWM(0-255): ");
}
void loop()
{
//Revisa que haya al menos se haya recibido un caracter en el puerto serie
if(Serial.available())
{
char ch=Serial.read();
if(ch >= '0' && ch <= '9')
{
valor=(valor*10) + (ch-'0');
Serial.print(ch);
}
//13 es el valor del caracter que indica retorno de carro o ENTER o que se termino de mandar el numero completo
else if(ch==13)
{
analogWrite(9,valor);
Serial.println(" ");
Serial.print("Introduce valor del PWM(0-255): ");
valor=0; //Se inicializa la variable nuevamenta para esperar otro dato
}
}
}
void setup() {
Serial.begin(9600);
inputString.reserve(200);
}
void loop() {
if (stringComplete) {
Serial.println(inputString);
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n')
{
stringComplete = true;
}
}
}
G) Añada al programa anterior que el programa permita controlar la velocidad del motor de la
siguiente forma:
• Al presionar la tecla “+” se ira incrementando la velocidad una magnitud definida por el
programador.
• Al presionar la tecla “-” se reducirá la velocidad una magnitud definida por el
programador.
H) Diseñe un programa que permita el Arranque, Paro, Cambio de Giro de un motor y el control
de su velocidad desde el puerto serie. Las teclas serán las siguientes:
• “A” para Arranque.
• “P” para Paro.
• “D” para giro hacia la derecha o CW.
• “I” para giro hacia la izquierda o CCW.
• Y para el control de la velocidad se introducirá un valor de entre 0 y 100 para fijar la
velocidad. 0 es el motor detenido y el 100 siginificará la velocidad máxima del motor.
Observaciones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________
Conclusiones
_________________________________________________________________________________
_________________________________________________________________________________
_________________________________________________________________________________