Lab13 Funciones y Control de Motores
Lab13 Funciones y Control de Motores
Lab13 Funciones y Control de Motores
Introducción a la Mecatrónica
I Ciclo
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);
}
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:
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);
}
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);
}
}
Ejercicio 5:
Funciones:
Ejercicio 6:
void setup(){
pinMode(MIa, OUTPUT);
pinMode(MIb, OUTPUT);
pinMode(MDa, OUTPUT);
pinMode(MDb, OUTPUT);
pinMode(pulI, INPUT);
pinMode(pulD, INPUT);
}
void loop(){
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;
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();
}
}
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);
digitalWrite(MDb, LOW);
}
Velocidad: 10%, 20%, 30%, 40%, 50%, 60%, 70% ,80%, 90% ,100%
Avanzar
Función: Avanzar
Función: Retroceder
Función: Derecha
Función: Izquierda
Función: Detener
Observaciones:
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
Conclusiones: