UNIDAD 1, UNIDAD 2 Y UNIDAD 3
PASO 6
ENTREGAR EL PROYECTO FINAL Y SUSTENTACIÓN
CESAR RICARDO CORREDOR
GRUPO 309696_20
MICROCONTROLADORES Y MICROPROCESADORES
PRESENTADO A:
OMAR ALBEIRO TREJO
(TUTOR)
UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA
ESCUELA DE CIENCIAS BÁSICAS TECNOLOGÍA E INGENIERÍA
2021
Introducción
En el siguiente trabajo se dará solución a un problema planteado utilizando las
herramientas y conocimientos adquiridos durante nuestro ciclo de aprendizaje
afianzando aún más nuestros conocimientos en la programación de alto y bajo nivel
y en el uso de microcontroladores y microprocesadores
ACTIVIDAD PASO 6
1. Para la maquina “amasadora de pan” se debe diseñar una perilla para ajustar
el tiempo de funcionamiento del rotor, el tiempo mínimo es de 10 segundos
y el tiempo máximo es de 1 minuto, por lo que esta perilla se puede ajustar
con un potenciómetro y el rotor será un motor DC que controla el
Microcontrolador o la placa de desarrollo GNU
2. La segunda perilla de la maquina “amasadora de pan “es el control y ajuste
de rotación mediante revoluciones por minuto (RPM), por lo que con esta
perilla se ajusta la velocidad de rotación del rotor, tengan en cuenta que se
debe controlar desde 0x100rpm hasta 40x100rpm, (el ajuste de rotación se
puede hacer en cualquier momento del funcionamiento de la máquina)
3. Deben utilizar Arduino, Microcontroladores o la placa de desarrollo GNU
seleccionada para la programación y diseño de la máquina, la simulación y
desarrollo de los circuitos se realiza en el software Proteus.
4. Compilar los productos solicitados en las unidades anteriores y trabajos
colaborativos anteriores y realizar la entrega junto con estos.
Propuesta para solución de ejercicio
En la anterior imagen observamos el circuito implementado para darle solución a
la actividad del paso 6 este circuito consta de una placa Arduino uno desde donde
se realizará todo el control de la maquina amasadora de pan
Consta de dos potenciómetros con los que se podrá controlar el tiempo de
duración y la velocidad del motor
Consta de un motor dc que en este caso será la maquina amasadora de pan
Consta de un pulsador normalmente abierto con el que daremos inicio al sistema
después de ajustar el tiempo de ejecución y la velocidad con la que queremos que
rote el motor
Un puerto serial en donde se mostrarán mensajes para interactuar con el usuario
Consta de una pantalla LCD en donde se mostrará la velocidad del motor
Simulación
Al darle inicio a la simulación nos aparecerá un mensaje en el puerto serial
dándonos la bienvenida a la empresa de bambú luego de eso nos indicará el
funcionamiento de cada una de las perillas y nos pedirá elegir el tiempo de
ejecución y presionar el botón de inicio
Una vez elegimos el tiempo y presionamos el botón de inicio nos aparecerá en
pantalla el tiempo de ejecución y también nos ira mostrando el tiempo que queda
de ejecución y en la pantalla LCD podremos ver velocidad con la que está girando
el motor
La velocidad del motor está dada en RPM (revoluciones por minuto)
Luego de que el proceso a terminado nos aparecerá en pantalla el mensaje de “
proceso terminado” y nos pedirá nuevamente que elijamos el tiempo y
presionemos el botón de inicio para un nuevo proceso
Con esto se evidencia el correcto funcionamiento del circuito
Código realizado en el IDE de Arduino para el control de circuito
//UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA
//MICROCONTROLADORES Y MICROPROCESADORES
//DESCRIPCION: se hace el algoritmo necesario para una amasadora de pan para la empresa de Bambo
// _____________REQUERIMIRNTOS_________________________-
// A. Una perilla para ajustar el timepo del rotor entre 10 s y 1 minuto
// B. segunda perilla que mantiene el control de ajuste de rotacion por RPM entre 0 y 4000 rmp
//----------------------SECCION DE LIBRERIAS-------------------------------------------------------
#include <YetAnotherPcInt.h> // LIBRERIA PARA LA INTERUPCIO POR CAMBIO DE FLANCO DE LOS PINES
#include <LiquidCrystal.h> // LIBRERIA PARA LA PANTALLA LCD
//-----------------------SECCION ASIGNACION DE NOMBRES A LOS PINES DEL ARDIONO--------------------
#define PCINT_PIN A5
#define PWM 9 // PIN DE SALIDA DE PWM
#define TIME A0 // PIN ANALOGO DE ENTRADA
#define RPM A2 // PIN ANALOGO DE ENTRADA
#define intPin 2 // PIN PARA LA INTERUPCION PARA LEER EL VALOR DE PRM DEL MOTOR
#define Rstarts 3 // PIN PARA iniciar o reiniciar el proceso
//------------SECCION DE VARIABLES---------------------------------------------------------------
int valor_time=0; //LECTURA DEL ADC PARA LA PERRILA DEL TIEMPO
int valor_rmp= 0; //LECTURA DEL ADC PARA LA PERILLA DE LA VELOCIDAD
int cuenta_segundos =0; // VARIABLE QUE LLEVA EL TIEMPO
long valor_time_max=0; // VALOR QUE AJUSTA EL U SURARIO
char andar=0; // BANDERA DE INICIO, REINICIO Y TERMINAR DEL PROCESO
float ante_pwm=0;
long cuenta_rmp=0; // VALOR DE LOS PRM DEL MOTOR
volatile int ISRCounter = 0; // CONTADOR DE FLANCOR DEL RPM DEL MOTOR
int rest_cuenta= 0; // VALOR RESTANTE DE TIEMPO DEL PROCESO
float vlPWM; //CONVERSION DE PWS SEGUN EL VALRO DE RPMS
char fl=1; // BANDERA DE MENSAJE DE REINICIO
char cntbeg=0; // CONTADOR DEL BOTON START
// AQUI SE CONFIGURAN LOS PINES PARA LA COMUNICACION CON LA PANTALLA
// RS,RE, D3,D2,D1,D0
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
//---------------INICIO DEL CODICO-------------------------------------------------------
// SETUP::
// DESCRICPIOM: FUNCOIN QUE PERMITE CONFIGURAR LOS ESTADOS INICAILES DE LOS PERIFERICO S Y VARIABLES
void setup ()
{
Serial.begin(9600);
pinMode(PWM,OUTPUT);
pinMode(Rstarts ,INPUT);
pinMode(intPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(intPin), interruptCount, LOW);
SREG = (SREG & 0b01111111); //Desabilitar interrupciones
TIMSK2 = TIMSK2|0b00000001; //Habilita la interrupcion por
desbordamiento
TCCR2B = 0b00000111; //Configura preescala para que FT2 sea de
7812.5Hz
SREG = (SREG & 0b01111111) | 0b10000000; //Habilitar interrupciones //Desabilitar
interrupciones
// INDICAMOS QUE TENEMOS CONECTADA UNA PANTALLA DE 16X2
lcd.begin(16, 2);
// MOVER EL CURSOR A LA PRIMERA POSICION DE LA PANTALLA (0, 0)
lcd.home();
// IMPRIMIR EN LA PRIMERA LINEA
lcd.print(" BIENVENIDOS");
// MOVER EL CURSOR A LA SEGUNDA LINEA (1) PRIMERA COLUMNA (0)
lcd.setCursor ( 0, 1 );
// IMPRIMIR OTRA CADENA EN ESTA POSICION
lcd.print("EMPRESA BAMBO");
delay(1000);
// MOVER EL CURSOR A LA PRIMERA POSICION DE LA PANTALLA (0, 0)
lcd.clear();
lcd.home();
// IMPRIMIR EN LA PRIMERA LINEA
lcd.print("VALOR EN RPM");
lcd.setCursor ( 0, 1 );
// IMPRIMIR OTRA CADENA EN ESTA POSICION
lcd.print(0.0);
// mensajes de inicio en el serial print o virtual terminal
Serial.println("BIENVENIDO A LA EMPRESA BAMBO ");
Serial.println(" ");
Serial.println("PRERILLA UNO PARA EL TIEMPO DE DURACION DEL ROTOR");
Serial.println("PRERILLA DOS PARA LAS RPM DEL MOTOR");
Serial.println(" ");
}
// funcion void loopp
// DESCRICPION: en esta funcoin se realiza el proceso de ejecucion de la apliacion,
//se manipulan la varialbes y se ejecutan la funciones necesarias,con el fin de que la aplicaion cumpla con la funcion
void loop ()
{
if (digitalRead(Rstarts)==HIGH && cntbeg==0) // verifica si se presiono el voto start una sola vez
{
cntbeg++;
while (digitalRead(Rstarts)==HIGH); // espera a que el ususario sulete el boto presionado
valor_time = analogRead(TIME); //valor analogo para el limite de tiempo
//menor = 10 segundos y mayor = 1 minuto-> 60 segundos m = (60-10)/(1023-0)=0,0488758
valor_time_max= (0.0488758*valor_time ) + 10;
Serial.print("SE TIENE UN TIEMPO DE: ");
Serial.print(valor_time_max);
Serial.println(" s");
andar=1;
Serial.print("tiempo restante en segundos: ");
}
if (andar==1) // SI SE PRESIONO EL BOTON START
{
valor_rmp = analogRead(RPM);
//RPM varia entre 0 0 y 4000 RPM PWM 5 -- 255 VAL_PWM = 4000/1023* VALOR_ANPWM
vlPWM = (3.910068)* valor_rmp;
if (vlPWM!=ante_pwm)
{
// MOVER EL CURSOR A LA SEGUNDA LINEA (1) PRIMERA COLUMNA (0)
lcd.setCursor ( 0, 1 );
// IMPRIMIR OTRA CADENA EN ESTA POSICION
lcd.print(" ");
lcd.setCursor ( 0, 1 );
lcd.print(vlPWM);
}
//para cargar el valor de pwm no puede ser mayo a 255 -> lvPWM = 255/4000*VAL_PWM
int pwout = (255/4000)* vlPWM;
analogWrite(PWM,valor_rmp /4);
ante_pwm= vlPWM;
}
else if (andar==0 && fl == 1)
{
Serial.println("ELIGA EL TIEMPO QUE DESEA CON LA PELILLA DEL TIEMPO, 0% SON 10 SEG Y 100% ES 1 MIN");
Serial.println("PRESIONE START PARA INICAR");
analogWrite(PWM,6);
fl=0;
}
}
//FUNC0INES ISR DE TIMER 2
//DESCRIPCION: ESTA FUNCI0N PERMITE EVALUAR EL DESEBORDE DE TIMER CADA 33 ms
ISR(TIMER2_OVF_vect){
cuenta_rmp++; // SE CUNETA EL VALRO PARA TENER EL CONTEO POR UN SEGINDP
if (cuenta_rmp >30) // SE CIMPLE EL SEGUNDO DE RIEPO
{
int pmr= ISRCounter* 60; // SE ENCUENTRA EL VALOR DE LAS REVOLVUONES POR MINUTO
ISRCounter=0; // SE REINICAR EL CONTADOR DE FLANCOS DEL MOTOR DC ENCODER
cuenta_rmp =0;
cuenta_segundos++; // SE INCREMENTA UNA VEZ EL SEGUNDO
rest_cuenta++;
if (andar==0)
{
cuenta_segundos=0;
}
if (rest_cuenta>5) // VALOR PARA MOSTAR EL CAMBIO DE TIMEPO DACA SEGUNDO
{
int rest_time= valor_time_max-cuenta_segundos; // VALOR RESTANTE DEL TIEMPO QUE QUEDA DEL PROCESO
if (rest_time>100) // PARA TENER UNA VISUALIZACION LIMPIA EN EL VIRTUAL TERMINAL
{
Serial.print("\b\b\b");
}else
{
Serial.print("\b\b");
}
Serial.print( rest_time);
rest_cuenta= 0;
}
if (cuenta_segundos > valor_time_max) // SI YA SE TERMINO EL TIEMPO DEL PROCESO QUE ELECCIONO EL
USSUARIO
{
andar = 0;
fl=1;
cntbeg=0;
Serial.println(" ");
Serial.println("PROCESO TERMINADO");
Serial.println(" ");
}
if (cuenta_segundos > valor_time_max +10)
{
cuenta_segundos = valor_time_max +10;
}
}
}
//FUNCION INTTRUPTCOUNT
//DESCRPCION: ESTA FUNCOI PERMITE ACCEDAR A LA INTERRUPCION POR CAMBIO DE FLANCO EN EL PIN 2 DEL ARDINO,
QUE ES EL SENSOR DEL
// CONTADOR DE CICLOS DEL ENCODER DEL MOTOR, NECESARO PARA CONTAR LAS REVOLCIONES DEL MOTOR
void interruptCount()
{
ISRCounter++;
}
Conclusiones
❖ Se pudo comprender y aplicar todos los conceptos previamente estudiados
para el completo desarrollo del paso 6.
❖ Se utilizó el lenguaje de programación de bajo y alto nivel con la
implementación de las herramientas propuestas en el curso para el
desarrollo del mismo.
❖ Al utilizar los periféricos de entrada y salida programando el
Microcontrolador o tarjeta de desarrollo GNU y utilizando lenguaje de
programación se pudo cumplir con cada uno de los objetivos propuestos
tanto para el paso 6 como para los logros individuales de cada uno de los
integrantes del grupo
Bibliografía
Díaz, R. F. (06 de 12 de 2018). Programacion en Arduino-Proteus de Maquina
Centrifugadora. Obtenido de
https://www.youtube.com/watch?v=WjSy4LPLqmM
Valega, K. (16 de 07 de 2019). Maquina centrifuga | Proteus, Arduino UNO y
Potenciómetros. Obtenido de
https://www.youtube.com/watch?v=W5JD5N752Vo