Está en la página 1de 12

LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic.

Vladimir Calsina Cota--

GUÍA DE LABORATORIO

DESARROLLO DE APLICACIONES EN PLATAFORMA ARDUINO

1) PROGRAMA DE PARPADEO DE LED


a) Con tiempos de espera constantes:
void setup() { //Apertura del programa de inicialización
pinMode (7,OUTPUT); // Configuramos el puerto 7 como salida
} // cierre de sector de inicialización
void loop() { //Apertura del programa cíclico
digitalWrite(7,HIGH); // Escribimos o ponemos el puerto 7 en nivel alto
delay (100); // Esperamos 100 milisegundos
digitalWrite(7,LOW); // Escribimos o ponemos el puerto 7 en nivel bajo
delay (1000); // Esperamos 1000 milisegundos

} //
Cierre del
DUINO1
programa
cíclico
microcontrolandos.blogspot.com

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

DIGITAL (~PWM)

7
ANALOG IN

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

ARDUINO UNO R3
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

b) Con tiempos de espera variables controlados por potenciómetro:


int Pot=A0;
int Led =2;
int duracion;
void setup() {
pinMode(Pot,INPUT);
pinMode(Led,OUTPUT);
}
void loop() {
duracion=analogRead(Pot);
digitalWrite(Led,HIGH);
delay(duracion);
digitalWrite(Led,LOW);
delay(duracion);
}

DUINO1
microcontrolandos.blogspot.com

AREF
13
PB5/SCK
12
PB4/MISO
RESET 11
~PB3/MOSI/OC2A
10
~ PB2/SS/OC1B
~ PB1/OC1A
9 D1
RV1 8 LED-BIBY
PB0/ICP1/CLKO
ATMEGA328P-PU
1121

DIGITAL (~PWM)

7
ANALOG IN

PD7/AIN1
6
50%

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

ARDUINO UNO R3
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

2) SECUENCIA DE 4 LEDS CONTROLADO CON POTENCIÓMETRO


//int Pot=A0; digitalWrite(Led4,LOW);
int Led1=1; delay(duracion);
int Led2=2; digitalWrite(Led1,LOW);
int Led3=3; digitalWrite(Led2,HIGH);
int Led4=4; digitalWrite(Led3,LOW);
int duracion; digitalWrite(Led4,LOW);
void setup() { delay(duracion);
pinMode(A0,INPUT); digitalWrite(Led1,LOW);
pinMode(Led1,OUTPUT); digitalWrite(Led2,LOW);
pinMode(Led2,OUTPUT); digitalWrite(Led3,HIGH);
pinMode(Led3,OUTPUT); digitalWrite(Led4,LOW);
pinMode(Led4,OUTPUT); delay(duracion);
} digitalWrite(Led1,LOW);
void loop() { digitalWrite(Led2,LOW);
duracion=analogRead(A0); digitalWrite(Led3,LOW);
digitalWrite(Led1,HIGH); digitalWrite(Led4,HIGH);
digitalWrite(Led2,LOW); delay(duracion);
digitalWrite(Led3,LOW);
13
12

10
11

9
8

7
6
5
4
3
2
1
0

DUINO1
PB4/MISO

PB0/ICP1/CLKO
AREF

TX PD1/TXD
RX PD0/RXD
PD7/AIN1
~ PD6/AIN0
PD5/T1

~ PD3/INT1
PD2/INT0
PB5/SCK

~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A

PD4/T0/XCK

ARDUINO UNO R3
~

DIGITAL (~PWM)

D1 D2 D3 D4
LED-BIBY LED-BIBY LED-BIBY LED-BIBY
ATMEGA328P-PU
1121

microcontrolandos.blogspot.com
PC4/ADC4/SDA
PC5/ADC5/SCL

ANALOG IN
RV1 R1 R2 R3 R4
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3

220R 220R 220R 220R


RESET
50%

A0
A1
A2
A3
A4
A5

1k
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

3) CONTROL DE MOTOR PASO A PASO (CON GIRO A IZQUIERA Y DERECHA)


// SOLUCIÓN Nº 1 if (pulsador2==1){ digitalWrite
digitalWrite(4,HIGH); (cadenaleds[n],LOW);
int pulsador1=0; digitalWrite(3,LOW); }
int pulsador2=0; digitalWrite(2,LOW); }
int tiempo=200; digitalWrite(1,LOW); void flash2() {
delay(tiempo); for (n=3;n>-1;n--) {
void setup() digitalWrite(4,LOW); digitalWrite
{ digitalWrite(3,HIGH); (cadenaleds[n],HIGH);
digitalWrite(2,LOW); delay (tiempo);
pinMode(1,OUTPUT); digitalWrite(1,LOW); digitalWrite
pinMode(2,OUTPUT); delay(tiempo); (cadenaleds[n],LOW);
pinMode(3,OUTPUT); digitalWrite(4,LOW); }
pinMode(4,OUTPUT); digitalWrite(3,LOW); }
pinMode(8,INPUT); digitalWrite(2,HIGH); void loop() {
pinMode(9,INPUT); digitalWrite(1,LOW); if
} delay(tiempo); (digitalRead(pulsador1)==HIGH)
void loop() digitalWrite(4,LOW); {
{ digitalWrite(3,LOW); flash ();
pulsador1=digitalRead(9); digitalWrite(2,LOW); }
if (pulsador1==1){ digitalWrite(1,HIGH); if
digitalWrite(1,HIGH); (digitalRead(pulsador2)==HIGH)
digitalWrite(2,LOW); delay(tiempo); {
digitalWrite(3,LOW); flash2 ();
digitalWrite(4,LOW); } }
}
delay(tiempo);
digitalWrite(1,LOW); // SOLUCION Nº 2
digitalWrite(2,HIGH); int cadenaleds[]={1,2,3,4};
digitalWrite(3,LOW); int pulsador1=8;
digitalWrite(4,LOW); int pulsador2=9;
int tiempo=200;
delay(tiempo); int n=0;
digitalWrite(1,LOW); void setup() {
digitalWrite(2,LOW); pinMode (1,OUTPUT);
digitalWrite(3,HIGH); pinMode (2,OUTPUT);
digitalWrite(4,LOW); pinMode (3,OUTPUT);
pinMode (4,OUTPUT);
delay(tiempo); //}
digitalWrite(1,LOW); pinMode (pulsador1,INPUT);
digitalWrite(2,LOW); pinMode (pulsador2,INPUT);
digitalWrite(3,LOW); }
digitalWrite(4,HIGH); void flash() {
for (n=0;n<4;n++) {
delay(tiempo); digitalWrite
} (cadenaleds[n],HIGH);
pulsador2=digitalRead(8); delay (tiempo);
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--
SIMULACION DEL CIRCUITO DE CONTROL DE MOTORES PASO A PASO

Con Leds

Con Motor paso a paso


LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--
4) MANEJO DE DISPLAY DE 7 SEGMENTOS (CATODO COMUN) CONTADOR DE: 0 -9
SOLUCION Nº1
ARD2
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
AREF
13
digitalWrite(5,HIGH);
PB5/SCK
RESET
PB4/MISO
12
11
digitalWrite(6,HIGH);
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
10
9
delay(tiempo);
~ PB1/OC1A
PB0/ICP1/CLKO
8 digitalWrite(0,HIGH);//8
ATMEGA328P-PU
1121

DIGITAL (~PWM) digitalWrite(1,HIGH);


ANALOG IN

7
PD7/AIN1
6
A0 ~ PD6/AIN0
A1
PC0/ADC0
~ PD5/T1
5 digitalWrite(2,HIGH);
PC1/ADC1 4
A2 PD4/T0/XCK
A3
PC2/ADC2
~ PD3/INT1
3 digitalWrite(3,HIGH);
PC3/ADC3 2
A4 PD2/INT0
A5
PC4/ADC4/SDA
TX PD1/TXD
1 digitalWrite(4,HIGH);
PC5/ADC5/SCL 0
RX PD0/RXD
digitalWrite(5,HIGH);
ARDUINO UNO R3 digitalWrite(6,HIGH);
delay(tiempo);
digitalWrite(0,HIGH);//9
int tiempo=500; digitalWrite(1,HIGH);
digitalWrite(6,HIGH);
void setup() digitalWrite(2,LOW);
delay(tiempo);
{ digitalWrite(3,LOW);
digitalWrite(0,HIGH);//3
pinMode(0,OUTPUT);//pin 0 salida digitalWrite(4,HIGH);
digitalWrite(1,LOW);
pinMode(1,OUTPUT); digitalWrite(5,HIGH);
digitalWrite(2,LOW);
pinMode(2,OUTPUT); digitalWrite(6,HIGH);
digitalWrite(3,HIGH);
pinMode(3,OUTPUT); delay(tiempo);
digitalWrite(4,HIGH);
pinMode(4,OUTPUT); }
digitalWrite(5,HIGH);
pinMode(5,OUTPUT); SOLUCION Nº 2
digitalWrite(6,HIGH);
pinMode(6,OUTPUT); void setup() {
delay(tiempo);
} DDRD =B01111111;
digitalWrite(0,HIGH);//4
void loop() }
digitalWrite(1,HIGH);
{ void loop() {
digitalWrite(2,LOW);
digitalWrite(0,LOW);//0 PORTD=B01111110;// 0 abcdefg
digitalWrite(3,LOW);
digitalWrite(1,HIGH); delay(1000);
digitalWrite(4,HIGH);
digitalWrite(2,HIGH); PORTD=B00110000;// 1
digitalWrite(5,HIGH);
digitalWrite(3,HIGH); delay(1000);
digitalWrite(6,LOW);
digitalWrite(4,HIGH); PORTD=B01101101; // 2
delay(tiempo); //
digitalWrite(5,HIGH); delay(1000);
digitalWrite(0,HIGH);//5
digitalWrite(6,HIGH); PORTD=B01111001; //3
digitalWrite(1,HIGH);
delay(tiempo); //espera 1 seg. delay(1000);
digitalWrite(2,LOW);
digitalWrite(0,LOW);//1 PORTD=B00110011;;//4
digitalWrite(3,HIGH);
digitalWrite(1,LOW); delay(1000);
digitalWrite(4,HIGH);
digitalWrite(2,LOW); PORTD=B01011011;;//5
digitalWrite(5,LOW);
digitalWrite(3,LOW); delay(1000);
digitalWrite(6,HIGH);
digitalWrite(4,HIGH); PORTD=B00011111;;//6
delay(tiempo);
digitalWrite(5,HIGH); delay(1000);
digitalWrite(0,HIGH);//6
digitalWrite(6,LOW); PORTD=B01110000;;//7
digitalWrite(1,HIGH);
delay(tiempo); delay(1000);
digitalWrite(2,HIGH);
digitalWrite(0,HIGH);//2 PORTD=B01111111;;//8
digitalWrite(3,HIGH);
digitalWrite(1,LOW); delay(1000);
digitalWrite(4,HIGH);
digitalWrite(2,HIGH); PORTD=B01110011;;//9
digitalWrite(5,LOW);
digitalWrite(3,HIGH); delay(1000);
digitalWrite(6,LOW);
digitalWrite(4,LOW); }
delay(tiempo);
digitalWrite(5,HIGH); digitalWrite(0,LOW);//7
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota-
---

5) VOLTÍMETRO CON DESPLIEGUE DE DATOS EN DISPLAY DE 7 SEGMENTOS


En base al siguiente ejemplo desarrolle el voltímetro con display de 7 segmentos de dos dígitos

const int Pot=A0; break; digitalWrite(4,HIGH);


int ledpins[]={0,1,2,3,4,5,6,}; case 3: digitalWrite(5,LOW);
digitalWrite(0,HIGH);//3 digitalWrite(6,LOW);
void setup() digitalWrite(1,LOW); break;
{ digitalWrite(2,LOW); case 7:
pinMode(0,OUTPUT);//ajusta pin 0 digitalWrite(3,HIGH); digitalWrite(0,LOW);//7
//como salida digitalWrite(4,HIGH); digitalWrite(1,LOW);
pinMode(1,OUTPUT); digitalWrite(5,HIGH); digitalWrite(2,LOW);
pinMode(2,OUTPUT); digitalWrite(6,HIGH); digitalWrite(3,LOW);
pinMode(3,OUTPUT); break; digitalWrite(4,HIGH);
pinMode(4,OUTPUT); case 4: digitalWrite(5,HIGH);
pinMode(5,OUTPUT); digitalWrite(0,HIGH);//4 digitalWrite(6,HIGH);
pinMode(6,OUTPUT); digitalWrite(1,HIGH); break;
} digitalWrite(2,LOW); case 8:
digitalWrite(3,LOW); digitalWrite(0,HIGH);//8
void loop() digitalWrite(4,HIGH); digitalWrite(1,HIGH);
{ digitalWrite(5,HIGH); digitalWrite(2,HIGH);
int valor=analogRead(Pot); digitalWrite(6,LOW); digitalWrite(3,HIGH);
int voltaje= map (valor,0,1023,0,5); break; digitalWrite(4,HIGH);
switch (voltaje){ case 5: digitalWrite(5,HIGH);
digitalWrite(0,HIGH);//5 digitalWrite(6,HIGH);
case 0: digitalWrite(1,HIGH); break;
digitalWrite(0,LOW);//0 digitalWrite(2,LOW); case 9:
digitalWrite(1,HIGH); digitalWrite(3,HIGH); digitalWrite(0,HIGH);//9
digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(1,HIGH);
digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(2,LOW);
digitalWrite(4,HIGH); digitalWrite(6,HIGH); digitalWrite(3,LOW);
digitalWrite(5,HIGH); break; digitalWrite(4,HIGH);
digitalWrite(6,HIGH); case 6: digitalWrite(5,HIGH);
break; digitalWrite(0,HIGH);//6 digitalWrite(6,HIGH);
case 1: digitalWrite(1,HIGH); break;
digitalWrite(0,LOW);//1 digitalWrite(2,HIGH); }
digitalWrite(1,LOW); digitalWrite(3,HIGH); }
digitalWrite(2,LOW);
digitalWrite(3,LOW); ARD2
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
AREF
break; PB5/SCK
13
12
PB4/MISO
case 2: RESET
~PB3/MOSI/OC2A
11
10
RV3 ~ PB2/SS/OC1B
9
digitalWrite(0,HIGH);//2 ~ PB1/OC1A
PB0/ICP1/CLKO
8
ATMEGA328P-PU
1121

DIGITAL (~PWM)

digitalWrite(1,LOW);
ANALOG IN

7
59%

PD7/AIN1
6
A0 ~ PD6/AIN0
PC0/ADC0 5
~
digitalWrite(2,HIGH); 1k
A1
A2
PC1/ADC1
PC2/ADC2
PD5/T1
PD4/T0/XCK
4
3
A3 ~ PD3/INT1
PC3/ADC3
digitalWrite(3,HIGH); A4
A5
PC4/ADC4/SDA
PD2/INT0
TX PD1/TXD
2
1
PC5/ADC5/SCL 0
RX PD0/RXD
digitalWrite(4,LOW);
ARDUINO UNO R3
digitalWrite(5,HIGH);
digitalWrite(6,HIGH); +88.8
AC Volts

6) TACÓMETRO DIGITAL
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir
Calsina Cota--

#include <LiquidCrystal.h> T2=pulseIn(0,LOW);


LiquidCrystal lcd (12,11,5,4,3,2); T=(T1+T2);
long T1; RPM=(30000000/T);
long T2; lcd.setCursor(0,0);
long T;
long RPM; lcd.print("REV DEL MOTOR");
lcd.setCursor(0,1);
void setup() { lcd.print(RPM);
lcd.begin(16,2); lcd.print("RPM");
pinMode(0,INPUT); delay (10);
}
}
void loop() {

T1=pulseIn(0,HIGH);
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

7) TERMÓMETRO DIGITAL

#include <LiquidCrystal.h> float valor= analogRead(inPin); /* regla de 3

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); float Volt = (valor/1023)*5; * 5v ===> 1023

Const int inPin=1; float Temperatura= Volt/0.01; * x ====>valor leido

void setup() //lcd.clear(); * ademas que 5v=5000mv

{ lcd.setCursor(0,0); * 1 oC = 10mv

lcd.begin(16,2); lcd.print("Temp ="); * x ====>volt

} lcd.print(Temperatura); */

void loop() delay(100);

{ }
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota-
-

8) VOLTÍMETRO DIGITAL

#include <LiquidCrystal.h> float Volt = (valor/1023)*5;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); lcd.setCursor(0,0);

const int inPin=A0; lcd.print("Voltaje =");

void setup() lcd.print(Volt);

{ delay(100);

lcd.begin(16,2); }

} /* regla de 3

void loop() * 5v ===> 1023

{ * x ====>valor leido

float valor= analogRead(inPin); */


LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

9) Arduino UNO Cargador de Bootloader para ATMEGA328-PU / ATMEGA328P-PU

Para mis proyectos de Electrónica uso principalmente mi Arduino Uno con aun ATMega328P-
PU, pero que sucede si queremos cargar el bootloader a un ATMEGA328-PU / ATMEGA328P-
PU, para sustituir al de nuestra placa Arduino o dejar a un lado nuestro hardware y montar
circuitos permanentes sin gastar tanto dinero.

Existe una forma de cargarle el Bootloader usando nuestra placa y unos pocos componentes.

 Arduino Uno R3.

 ATMega328P-PU / ATMega328-PU (sin bootloader).

 1x Cristal de cuarzo a 16Mhz.

 2x Condensadores 22pF.

 1x Resistencia 10kΩ.

 Software Arduino 1.0.1 o 1.0.3.

Realizamos el montaje preferiblemente en el protoboard, luego de cargar un


microprocesador y ver si funciona sustituyéndolo por el de nuestro hardware y
cargando un ejemplo básico (Blink), procedemos a quemar en circuito en baquelita.

Paso 1

Cargamos nuestro Arduino el programa ArduinoISP, ruta: Archivos / Ejemplos /


ArduinoISP
LABORATORIO DE CONTROLES AUTOMÁTICOS ITA-383 --Lic. Vladimir Calsina Cota--

Paso 2

Montamos el circuito como se muestra en la imagen, este circuito lo podemos comprobar


desde aquí ArduinoToBreadboard.

Se que en la web hay otros modelos circuitales parecidos a este pero agregándole unos Leds, es
cuestión de gustos si lo desean incluyalon pero no son obligatorios. el Log del IDE de arduino
nos notificara mejor los resultados.

Paso 3

Como bien dice el titulo del post podemos cargar el bootloader a dos diferentes
microprocesadores ATMega328 con encapsulado DIP.

También podría gustarte