Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Lab13 Funciones y Control de Motores

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 17

NOTA

Introducción a la Mecatrónica
I Ciclo

Laboratorio 13: Función y control de


motores

Alumnos: Amaya Canchumanta Fabrizio Santiago

Docente: Armando Sarco Montiel

Fecha de realización: 14-06-2021

Fecha de entrega: 20-06-2021

2021
Lab. N° 13 Funciones y Control de
Motores

Ejercicio 1:

#include <IRremote.h>//Libreria IR
IRrecv irrecv(11);
decode_results results;

void setup(){
Serial.begin(9600);
irrecv.enableIRIn(); //Iniciar el receiver
pinMode(13,OUTPUT);
}
void loop(){
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); //Esperando el
siguiente
}
delay(100);
}

Se usa la librería #include <IRremote.h> para hacer funcionar el Sensor IR se aplicó


una condición para que si recibe un dato lo va a imprimir en el monitor serial, pero le
da un formato hexadecimal, al iniciar la simulación y presionar algún botón del
control se mostrara el código en el monitor serial

Docente: Armando Sarco Montiel


Pág. 2
Lab. N° 13 Funciones y Control de
Motores

Completar la siguiente tabla con los códigos del monitor serial:

Código en
Botón
hexadecimal

FD00FF

FDA05F

FD807F

FD906F

FD609F

FD20DF

0 FD30CF

1 FD08F7

2 FD8877

3 FD48B7

4 FD28D7

5 FDA857

6 FD6897

7 FD18E7

8 FD9867

9 FD58A7

Ejercicio 2:

Docente: Armando Sarco Montiel


#include <IRremote.h>
Pág. 3 int contador = 0;
IRrecv irrecv(11);
decode_results results;
void setup(){
Lab. N° 13 Funciones y Control de
Motores

Se modifico el programa anterior para que al presionar el botón rojo (FD00FF) el led
se encienda, esto se logra usando la librería #include <IRremote.h>, y también
usando el comando if para aplicar una condición.

Este programa resulto sencillo debido a que, solo se necesitó modificar el programa
y no realizar una nuevo.

Puente H:
Docente: Armando Sarco Montiel
Pág. 4
Lab. N° 13 Funciones y Control de
Motores
Ejercicio 3:
void setup(){
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop(){
digitalWrite(10, LOW);
delay(3000);
digitalWrite(9, LOW);
delay(3000);
digitalWrite(10, HIGH);
delay(3000);
digitalWrite(9, LOW);
delay(3000);
digitalWrite(10, LOW);
delay(3000);
digitalWrite(9, HIGH);
delay(3000);
}

Se uso una batería de 9 V esto es para la alimentación de los motores y el Arduino


alimenta al integrado, lo que el programa realiza es que al iniciar la simulación el
motor estará apagado y después de 3 s se prendera, luego de otros 6 s se apagará
para después de 3 s volver a prenderse, pero girando en otro sentido.

Docente: Armando Sarco Montiel


Pág. 5
Lab. N° 13 Funciones y Control de
Motores

Ejercicio 4:

void setup(){
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
}

void loop(){
for(int i = 0; i < 255; i +=
1){
analogWrite(10,i);
digitalWrite(9,LOW);
Serial.println(i);
delay(50);
}
for(int i = 255; i > 0; i -=
1){
analogWrite(9,i);
digitalWrite(10,LOW);
Serial.println(i);
delay(50);
}
}

La pata 9 y 10 ambas salidas son PWM, pero en el programa se configuro como


salida digital esto solo se programó para el inicio y en el void loop se aplicó un
comando “for” para hacer un bucle el cual funciona que cuando el motor llegar a su
máximo valor cambiará de giro y al llegar al mínimo volverá a cambiar.

Docente: Armando Sarco Montiel


Pág. 6
Lab. N° 13 Funciones y Control de
Motores

Ejercicio 5:

Docente: Armando Sarco Montiel


Pág. 7
Lab. N° 13 Funciones y Control de
Motores

Funciones:
Ejercicio 6:

int MIa = 10; //Motor Izquierdo


int MIb = 9; //pwm
int MDa = 6; //Motor Derecho
int MDb = 5; //pwm
int pulI = 3;
int pulD = 2;
int v=127;

void setup(){
pinMode(MIa, OUTPUT);
pinMode(MIb, OUTPUT);
pinMode(MDa, OUTPUT);
pinMode(MDb, OUTPUT);
pinMode(pulI, INPUT);
pinMode(pulD, INPUT);
}

void loop(){

Docente: Armando Sarco Montiel


Pág. 8
Lab. N° 13 Funciones y Control de
Motores

if(digitalRead(pulI) == 1){
Avanzar();
}
else if(digitalRead(pulD) == 1){
Retroceder();
}
else{
Detener();
}
}

void Avanzar(){
analogWrite(MIa,v);
digitalWrite(MIb,LOW);
analogWrite(MDa,v);
digitalWrite(MDb,LOW);
}
void Retroceder(){
digitalWrite(MIa,LOW);
analogWrite(MIb,v);
digitalWrite(MDa,LOW);
analogWrite(MDb,v);
}
void Detener(){
digitalWrite(MIa,LOW);
digitalWrite(MIb,LOW);
digitalWrite(MDa,LOW);
digitalWrite(MDb,LOW);
}

Se conecto los motores a los puertos analógicos para poder aplicarle diversas
funciones como la de avanzar con un pulsador y retroceder con el otro y al dejar de
Docente: Armando Sarco Montiel
Pág. 9
Lab. N° 13 Funciones y Control de
Motores
pulsar el motor detendrá su giro, se usó el comando if, if else y else esto para aplicar
una condición y poder asignar funciones como la de avanzar, retroceder y detener.

Ejercicio 7:

#include <IRremote.h>
IRrecv irrecv(11);
decode_results results;
int MIa = 10; //Motor Izquierdo
int MIb = 9; //pwm
int MDa = 6; //Motor Derecho
int MDb = 5; //pwm
int velp = 10; //Velocidad de 0-100%
int vel = 26; //Velocidad de 0-255

void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(MIa, OUTPUT);
pinMode(MIb, OUTPUT);
pinMode(MDa, OUTPUT);
pinMode(MDb, OUTPUT);
}

void loop(){
if (irrecv.decode(&results)){
switch (results.value){
case 0xFD30CF://0
Serial.println("Vel = 100%: ");
velp = 100;

Docente: Armando Sarco Montiel


Pág. 10
Lab. N° 13 Funciones y Control de
Motores

break;
case 0xFD08F7://1
Serial.println("Vel = 10%: ");
velp = 10;
break;
case 0xFD8877://2
Serial.println("Vel = 20%: ");
velp = 20;
break;
case 0xFD48B7://3
Serial.println("Vel = 30%: ");
velp = 30;
break;
case 0xFD28D7://4
Serial.println("Vel = 40%: ");
velp = 40;
break;
case 0xFDA857://5
Serial.println("Vel = 50%: ");
velp = 50;
break;
case 0xFD6897://6
Serial.println("Vel = 60%: ");
velp = 60;
break;
case 0xFD18E7://7
Serial.println("Vel = 70%: ");
velp = 70;
break;
case 0xFD9867://8
Serial.println("Vel = 80%: ");
velp = 80;
break;
case 0xFD58A7://9
Serial.println("Vel = 90%: ");
velp = 90;
break;
case 0xFD807F://↑ Vol+
Avanzar();
break;
case 0xFD906F://↓ Vol-
Retroceder();
break;
case 0xFD609F://→
Derecha();
break;
case 0xFD20DF:
Izquierda();//←
break;
case 0xFDA05F://pause
Detener();
break;
default:
Detener();
break;
}
irrecv.resume();
}
}

Docente: Armando Sarco Montiel


Pág. 11
Lab. N° 13 Funciones y Control de
Motores

void Avanzar(){
Serial.print("Avanzar: ");
Serial.print("Vel = ");
Serial.print(velp);
Serial.print("%");
Serial.println("");
vel = map(velp, 0,100,0,255);
analogWrite(MIa, vel);
digitalWrite(MIb, LOW);
analogWrite(MDa, vel);
digitalWrite(MDb, LOW);
}
void Retroceder(){
Serial.print("Retroceder: ");
Serial.print("Vel = ");
Serial.print(velp);
Serial.print("%");
Serial.println("");
vel = map(velp, 0,100,0,255);
digitalWrite(MIa, LOW);
analogWrite(MIb, vel);
digitalWrite(MDa, LOW);
analogWrite(MDb, vel);
}
void Derecha(){
Serial.print("Derecha: ");
Serial.print("Vel = ");
Serial.print(velp);
Serial.print("%");
Serial.println("");
vel = map(velp, 0,100,0,255);
analogWrite(MIa, vel);
digitalWrite(MIb, LOW);
digitalWrite(MDa, LOW);
digitalWrite(MDb, LOW);
}
void Izquierda(){
Serial.print("Izquierda: ");
Serial.print("Vel = ");
Serial.print(velp);
Serial.print("%");
Serial.println("");
vel = map(velp, 0,100,0,255);
digitalWrite(MIa, LOW);
digitalWrite(MIb, LOW);
analogWrite(MDa, vel);
digitalWrite(MDb, LOW);
}
void Detener(){
Serial.print("Detener: ");
Serial.print("Vel = ");
Serial.print(velp);
Serial.print("%");
Serial.println("");
vel = 0;
digitalWrite(MIa, LOW);
digitalWrite(MIb, LOW);
digitalWrite(MDa, LOW);

Docente: Armando Sarco Montiel


Pág. 12
Lab. N° 13 Funciones y Control de
Motores

digitalWrite(MDb, LOW);
}

Velocidad: 10%, 20%, 30%, 40%, 50%, 60%, 70% ,80%, 90% ,100%

Avanzar

Función: Avanzar

Docente: Armando Sarco Montiel


Pág. 13
Lab. N° 13 Funciones y Control de
Motores

Función: Retroceder

Función: Derecha

Docente: Armando Sarco Montiel


Pág. 14
Lab. N° 13 Funciones y Control de
Motores

Función: Izquierda

Función: Detener

Docente: Armando Sarco Montiel


Pág. 15
Lab. N° 13 Funciones y Control de
Motores

Lo que el programa realiza es que puede controlar dos motores a través de


funciones asignadas a cada botón como, la función derecha la cual se realiza al
presionar el botón 0xFD609F o izquierda la cual se realiza al presionar 0xFD20DF y
asi se le asigno a cada botón una función para lograr eso se usó los comando
Switch y break.

Observaciones:

 En el monitor serial los botones del control aparecen en código hexadecimal

 Se observó que para hacer funcionar dos motores se necesita una fuente de
energía externa a la del Arduino

 El comando map sirve para aplicar una escala a los valores ya sean se un
motor, potenciómetro entre otros

 Se observo que en el ejercicion4 las patas 9 y 10 son salidas son PWM, pero
en el programa se configuro como salida digital esto solo se programó para el
inicio ya que, en el void loop cambiarían y actuarían como salidas PWM

 Se observo que el botón rojo del control en código hexadecimal es FD00FF

Conclusiones:

 Se aprendió a programar funciones

 Conocimos los usos y circuitos que se pueden realizar con un sensor IR

 Aprendimos sobre los comandos switch y break

 Conocimos el integrado L293D y sus usos

Docente: Armando Sarco Montiel


Pág. 16
Lab. N° 13 Funciones y Control de
Motores
 Se implemento un osciloscopio en algunos ejercicios y se logró conocer su
dutycicle

Docente: Armando Sarco Montiel


Pág. 17

También podría gustarte