domingo, 3 de diciembre de 2017

PROYECTO FINAL

1. ARDUINO UNO:
Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios.​Toda la plataforma, incluyendo sus componentes de hardware (esquemáticos) y Software, son liberados con licencia de código abierto que permite libertad de acceso a ellos. El hardware consiste en una placa de circuito impreso con un microcontrolador, usualmente Atmel AVR, puertos digitales y analógicos de entrada/salida,​ los cuales pueden conectarse a placas de expansión (shields), que amplían los funcionamientos de la placa Arduino. Asimismo, posee un puerto de conexión USB desde donde se puede alimentar la placa y establecer comunicación con el computador.
Placa Arduino Uno
Microcontrolador ATmega 328P de la familia ATMEL

1.1 PRINCIPALES CARACTERÍSTICAS:
  • Microcontrolador AVR® de 8 bits de alto rendimiento y baja potencia
  • Arquitectura RISC avanzada: *131 potentes instrucciones - La mayoría de ejecución de ciclo de reloj único, *32 x 8 Registros de trabajo de propósito general, *Operación completamente estática, *Hasta 20 MIPS de rendimiento a 20 MHz, *Multiplicador de 2 ciclos en chip
  • Segmentos de memoria no volátil de alta resistencia: *4/8/16 / 32K Bytes de la memoria del programa Flash autoprogramable dentro del sistema, *256/512/512 / 1K Bytes EEPROM, *512 / 1K / 1K / 2K bytes SRAM internos, *Ciclos de escritura / borrado: 10,000 Flash / 100,000 EEPROM, *Retención de datos: 20 años a 85 ° C / 100 años a 25 ° C (1), *Sección de código de arranque opcional con bits de bloqueo independientes, *Programación en el sistema mediante el programa de arranque en chip, *Verdadera operación de lectura mientras se escribe, *Bloqueo de programación para seguridad de software.
  • Características periféricas: *Dos temporizadores / contadores de 8 bits con preescalador independiente y modo de comparación, *Un temporizador / contador de 16 bits con preescalador independiente, modo de comparación y captura, *Modo: *Contador en tiempo real con oscilador separado, *Seis canales PWM, *ADC de 8 canales y 10 bits en el paquete TQFP y QFN / MLF.
  • Medida de temperatura: *ADC de 10 canales de 10 bits en paquete PDIP, *Serie USART programable, *Interfaz serial SPI Master / Slave, *Interfaz serie de 2 hilos orientada a bytes (Philips I2C compatible), *Temporizador de vigilancia programable con oscilador separado en el chip, *Comparador analógico en el chip, *Interrumpir y despertar en el cambio de pin.
  • Funciones especiales del microcontrolador: *Reinicio de encendido y detección programable de apagado, *Oscilador calibrado interno, *Fuentes de interrupción externa e interna, *Seis modos de reposo: inactivo, reducción de ruido ADC, ahorro de energía, apagado, modo de espera, y Standby extendido
  • E / S y paquetes:*23 líneas de E / S programables, *PDIP de 28 pines, TQFP de 32 derivaciones, QFN / MLF de 28 almohadillas y QFN / MLF de 32 almohadillas
  • Tensión de funcionamiento:1.8 - 5.5V
  • Rango de temperatura: -40 ° C a 85 ° C
  • Grado de velocidad: - 0 - 4 MHz@1.8 - 5.5V, 0 - 10 MHz@2.7 - 5.5.V, 0 - 20 MHz @ 4.5 - 5.5V 
  • Consumo de energía a 1 MHz, 1.8V, 25 ° C: *Modo activo: 0.2 mA, *Modo de apagado: 0.1 μA, *Modo de ahorro de energía: 0,75 μA (incluido RTC de 32 kHz)
Pines de ATMEL-Atmega 328
Los pines I/O( Input/Output) están organizados en 3 puertos:
  • Puerto B: 8 pines.
  • Puerto C: 7 pines.
  • Puerto D: 8 pines.
1.2 DIAGRAMA INTERNO:
D.I de ATMEL-ATmega 328

D.I de ATMEL-ATmega 328 específicado
2. DESCRIPCIÓN DEL ÁREA DE TRABAJO DE ARDUINO:

3. MÓDULO ESP8266
  • CPU RISC de 32-bit: Tensilica Xtensa LX106 a un reloj de 80 MHza​
  • RAM de instrucción de 64 KB, RAM de datos de 96 KB
  • Capacidad de memoria externa flash QSPI - 512 KB a 4 MB* (puede soportar hasta 16 MB)
  • IEEE 802.11 b/g/n Wi-Fi
  • Tiene integrados: TR switch, balun, LNA, amplificador de potencia de RF y una red de adaptación de impedancias
  • Soporte de autenticación WEP y WPA/WPA2
  • 16 pines GPIO (Entradas/Salidas de propósito general)
  • SPI, I²C,
  • Interfaz I²S con DMA (comparte pines con GPIO)
  • Pines dedicados a UART, mas una UART unicamente para transmisión que puede habilitarse a través del pin GPIO2
  • 1 conversor ADC de 10-bit

Link de la página del proyecto: http://innovacion865.webnode.es/proyecto-final/

4.INTEGRANTES:

  • Jesus Cruz
  • Jefferson Miovich
  • Jefferson Laura
  • Jonathan Merma
  • Gustavo Zamata

domingo, 29 de octubre de 2017

PROYECTO 02: CHALECO PARA CICLISTA Y PASTILLERO CON ARDUINO

1. ARDUINO UNO:
Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios.​Toda la plataforma, incluyendo sus componentes de hardware (esquemáticos) y Software, son liberados con licencia de código abierto que permite libertad de acceso a ellos. El hardware consiste en una placa de circuito impreso con un microcontrolador, usualmente Atmel AVR, puertos digitales y analógicos de entrada/salida,​ los cuales pueden conectarse a placas de expansión (shields), que amplían los funcionamientos de la placa Arduino. Asimismo, posee un puerto de conexión USB desde donde se puede alimentar la placa y establecer comunicación con el computador.
Placa Arduino Uno
Microcontrolador ATmega 328P de la familia ATMEL

1.1 PRINCIPALES CARACTERÍSTICAS:
  • Microcontrolador AVR® de 8 bits de alto rendimiento y baja potencia
  • Arquitectura RISC avanzada: *131 potentes instrucciones - La mayoría de ejecución de ciclo de reloj único, *32 x 8 Registros de trabajo de propósito general, *Operación completamente estática, *Hasta 20 MIPS de rendimiento a 20 MHz, *Multiplicador de 2 ciclos en chip
  • Segmentos de memoria no volátil de alta resistencia: *4/8/16 / 32K Bytes de la memoria del programa Flash autoprogramable dentro del sistema, *256/512/512 / 1K Bytes EEPROM, *512 / 1K / 1K / 2K bytes SRAM internos, *Ciclos de escritura / borrado: 10,000 Flash / 100,000 EEPROM, *Retención de datos: 20 años a 85 ° C / 100 años a 25 ° C (1), *Sección de código de arranque opcional con bits de bloqueo independientes, *Programación en el sistema mediante el programa de arranque en chip, *Verdadera operación de lectura mientras se escribe, *Bloqueo de programación para seguridad de software.
  • Características periféricas: *Dos temporizadores / contadores de 8 bits con preescalador independiente y modo de comparación, *Un temporizador / contador de 16 bits con preescalador independiente, modo de comparación y captura, *Modo: *Contador en tiempo real con oscilador separado, *Seis canales PWM, *ADC de 8 canales y 10 bits en el paquete TQFP y QFN / MLF.
  • Medida de temperatura: *ADC de 10 canales de 10 bits en paquete PDIP, *Serie USART programable, *Interfaz serial SPI Master / Slave, *Interfaz serie de 2 hilos orientada a bytes (Philips I2C compatible), *Temporizador de vigilancia programable con oscilador separado en el chip, *Comparador analógico en el chip, *Interrumpir y despertar en el cambio de pin.
  • Funciones especiales del microcontrolador: *Reinicio de encendido y detección programable de apagado, *Oscilador calibrado interno, *Fuentes de interrupción externa e interna, *Seis modos de reposo: inactivo, reducción de ruido ADC, ahorro de energía, apagado, modo de espera, y Standby extendido
  • E / S y paquetes:*23 líneas de E / S programables, *PDIP de 28 pines, TQFP de 32 derivaciones, QFN / MLF de 28 almohadillas y QFN / MLF de 32 almohadillas
  • Tensión de funcionamiento:1.8 - 5.5V
  • Rango de temperatura: -40 ° C a 85 ° C
  • Grado de velocidad: - 0 - 4 MHz@1.8 - 5.5V, 0 - 10 MHz@2.7 - 5.5.V, 0 - 20 MHz @ 4.5 - 5.5V 
  • Consumo de energía a 1 MHz, 1.8V, 25 ° C: *Modo activo: 0.2 mA, *Modo de apagado: 0.1 μA, *Modo de ahorro de energía: 0,75 μA (incluido RTC de 32 kHz)
Pines de ATMEL-Atmega 328
Los pines I/O( Input/Output) están organizados en 3 puertos:
  • Puerto B: 8 pines.
  • Puerto C: 7 pines.
  • Puerto D: 8 pines.
1.2 DIAGRAMA INTERNO:
D.I de ATMEL-ATmega 328

D.I de ATMEL-ATmega 328 específicado
2. DESCRIPCIÓN DEL ÁREA DE TRABAJO DE ARDUINO:

3. COURSERA
3.1 Semana 01:
Verificar  el correcto funcionamiento del Arduino con el programa Blink
Programa Blink Compilado
Modificar el código Blink con las especificaciones del profesor
Programa Blink. Derivado del original

Lista de tareas y cuestionarios de la semana 01
Coursera-Jesús Cruz

3.2 Semana 02: CHALECO P
Rutina Ociosa:
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int tiempoRetOciosa = 200;
int cuenta_ocio = 0;
int estePin;
// Función setup
void setup ()
{
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 pinMode (led[estePin],OUTPUT);
 }
}
// Función loop
void loop ()
{
 digitalWrite (led[cuenta_ocio],HIGH);
 digitalWrite (led[cuenta_ocio+4],HIGH);
 delay (tiempoRetOciosa);
 digitalWrite (led[cuenta_ocio],LOW);
 digitalWrite (led[cuenta_ocio+4],LOW);
 cuenta_ocio++;
 if (cuenta_ocio > 3)
 {
 cuenta_ocio = 0;
 }

}

Rutina Izquierda:
int bot = 3;
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int tiempoRet = 400;
int estePin;
int cuenta_izq = 0;
boolean bot_izq = LOW;
// Función setup
void setup ()
{
 pinMode (bot,INPUT);
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 pinMode (led[estePin],OUTPUT);
 }
}
// Función loop
void loop ()
{
 bot_izq = digitalRead (bot);
 if (bot_izq==HIGH)
 {
 switch (cuenta_izq)
 {
 case 0:
 digitalWrite (led[2],HIGH);
 digitalWrite (led[9],HIGH);
 digitalWrite (led[4],HIGH);
 break;
 case 1:
 digitalWrite (led[1],HIGH);
 digitalWrite (led[8],HIGH);
 digitalWrite (led[5],HIGH);
 break;
 case 2:
 digitalWrite (led[0],HIGH);
 digitalWrite (led[7],HIGH);
 digitalWrite (led[6],HIGH);
 break;
 default:
 ;
 }
 delay (tiempoRet);
 cuenta_izq++;
 if (cuenta_izq > 3)
 {
 cuenta_izq = 0;
 }
 }
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],LOW);
 }

}
Rutina Derecha:
int bot = 2;
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int tiempoRet = 400;
int estePin;
int cuenta_der = 0;
boolean bot_der = LOW;
// Función setup
void setup ()
{
 pinMode (bot,INPUT);
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 pinMode (led[estePin],OUTPUT);
 }
}
// Función loop
void loop ()
{
 bot_der = digitalRead (bot);
 if (bot_der ==HIGH)
 {
 switch (cuenta_der)
 {
 case 0:
 digitalWrite (led[0],HIGH);
 digitalWrite (led[8],HIGH);
 digitalWrite (led[6],HIGH);
 break;
 case 1:
 digitalWrite (led[1],HIGH);
 digitalWrite (led[9],HIGH);
 digitalWrite (led[5],HIGH);
 break;
 case 2:
 digitalWrite (led[2],HIGH);
 digitalWrite (led[3],HIGH);
 digitalWrite (led[4],HIGH);
 break;
 default:
 ;
 }
 delay (tiempoRet);
 cuenta_der++;
 if (cuenta_der > 3)
 {
 cuenta_der = 0;
 }
 }
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],LOW);
 }

}
Rutina Stop:
int bot = 2;
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int tiempoRet = 400;
int estePin;
boolean bot_alto = LOW;
// Función setup
void setup ()
{
 pinMode (bot,INPUT);
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 pinMode (led[estePin],OUTPUT);
 }
}
// Función loop
void loop ()
{
 bot_alto = digitalRead (bot);
 if (bot_alto==HIGH)
 {
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],HIGH);
 }
 delay (tiempoRet);
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],LOW);
 }
 delay (tiempoRet);
 }
}
Rutina Completa:
int bot[] = {1,2,3};
int led[] = {4,5,6,7,8,9,10,11,12,13};
int numLeds = 10;
int numBots = 3;
int tiempoRet = 400;
int tiempoRetOciosa = 200;
int estePin;
int cuenta_der = 0;
int cuenta_alto = 0;
int cuenta_izq = 0;
int cuenta_ocio = 0;
boolean bot_derecha = LOW;
boolean bot_alto = LOW;
boolean bot_izquierda = LOW;
// Función setup
void setup ()
{
 for (estePin = 0; estePin < numBots; estePin++)
 {
 pinMode (bot[estePin],INPUT);
 }
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 pinMode (led[estePin],OUTPUT);
 }
}
// Función loop
void loop ()
{
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin], LOW);
 }
 bot_derecha = digitalRead (bot[0]);
 bot_alto = digitalRead (bot[1]);
 bot_izquierda = digitalRead (bot[2]);
 if (bot_derecha==HIGH)
{
 Derecha ();

}
 else if (bot_alto==HIGH
)

{
 Alto ();

}
 else if (bot_izquierda==HIGH
)

{
 Izquierda ();

}
 else

{
 Ociosa ();

}
}
// Función Derecha
void Derecha () {
 switch (cuenta_der)

{
 case 0:
 digitalWrite (led[0],HIGH);
 digitalWrite (led[8],HIGH);
 digitalWrite (led[6],HIGH);
 break
;
 case 1
:
 digitalWrite (led[1],HIGH);
 digitalWrite (led[9],HIGH);
 digitalWrite (led[5],HIGH);
 break
;
 case 2
:
 digitalWrite (led[2],HIGH);
 digitalWrite (led[3],HIGH);
 digitalWrite (led[4],HIGH);
 break
;
 default
:
;

}
 delay (tiempoRet);
 cuenta_der++;
 if (cuenta_der > 3)

{
 cuenta_der = 0;
 }
}
// Función Alto
void Alto ()
{
 if (cuenta_alto == 1)
 {
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],HIGH);
 }
 }
 else
 {
 for (estePin = 0; estePin < numLeds; estePin++)
 {
 digitalWrite (led[estePin],LOW);
 }
 }
 delay (tiempoRet);
 cuenta_alto++;
 if (cuenta_alto > 1)
 {
 cuenta_alto = 0;
 }
}
// Función Izquierda
void Izquierda ()
{
 switch (cuenta_izq)
 {
 case 0:
 digitalWrite (led[2],HIGH);
 digitalWrite (led[9],HIGH);
 digitalWrite (led[4],HIGH);
 break;
 case 1:
 digitalWrite (led[1],HIGH);
 digitalWrite (led[8],HIGH);
 digitalWrite (led[5],HIGH);
 break;
 case 2:
 digitalWrite (led[0],HIGH);
 digitalWrite (led[7],HIGH);
 digitalWrite (led[6],HIGH);
 break;
 default:
 ;
 }
 delay (tiempoRet);
 cuenta_izq++;
 if (cuenta_izq > 3)
 {
 cuenta_izq = 0;
 }
}
// Función Ociosa
void Ociosa ()
{
 digitalWrite (led[cuenta_ocio],HIGH);
 digitalWrite (led[cuenta_ocio+4],HIGH);
 delay (tiempoRetOciosa);
 cuenta_ocio++;
 if (cuenta_ocio > 3)
 {
 cuenta_ocio = 0;
 }

}
Lista de tarea y cuestionarios de la semana 02
Coursera- Jesús Cruz

3.3 Semana 03: PASTILLERO

Código para el pastillero:
/* Programa PastilleroV10.ino
 Controla la operación del pastillero.
 Contiene, además de las funciones setup() y loop(),
 las funciones ConversionHminMs(), ConversionMsHmin(),
 ActivaMotor(), Alarma(), Despliegue(),
 DespliegueHoraToma() e Interruptor(). */
// Variables Alarma
int pinBuzzer = 15;
int pinLed1 = 16;
int pinLed2 = 17;
int pinBoton = 2;
boolean banderaAlarma = HIGH;
int rep;
int numRep = 10;
int tiempoEnc = 600;
int tiempoApag = 400;
int tiempoEspera = 9900;
// Variables ActivaMotor
int pinIntLamina = 5;
int pinIN1 = 7;
int pinIN2 = 8;
int pinPWM = 9;
boolean estadoIntLamina;
int valorPWM = 230;
long tiempoActivacion[5];
int toma = 0;
// Variables Despliegue
long tiempoMs;
long tiempoBase;
long tiempoActual;
long hora;
long minuto;
long horaActual;
long minActual;
int tiempoRet = 19000;
// Se incluye el código de la biblioteca del LCD
#include <LiquidCrystal.h>
// Inicializa la biblioteca con el número de los pines
LiquidCrystal lcd(4, 6, 11, 12, 13, 14);
// Función setup
void setup()
{
// Hora de reinicio
 hora = 8;
 minuto = 39;
// Cálculo tiempo base
 ConversionHminMs();
 tiempoBase = tiempoMs;
// Configuración del número de columnas y renglones del LCD
 lcd.begin(16,2);
// Configuración terminales buzzer, led y botón alarma
 pinMode(pinBuzzer, OUTPUT);
 pinMode(pinLed1, OUTPUT);
 pinMode(pinLed2, OUTPUT);
 pinMode(pinBoton, INPUT);
 attachInterrupt(0, Interruptor, RISING);
// Configuración terminales del puente H y del interruptor
 pinMode(pinIN1, OUTPUT);
 pinMode(pinIN2, OUTPUT);
 pinMode(pinIntLamina, INPUT);
// Cálculo tiempos de activación del motor
// Hora de la primera toma
 hora = 9;
 minuto = 00;
 ConversionHminMs();
 tiempoActivacion[0] = tiempoMs;
// Hora de la segunda toma
 hora = 12;
 minuto = 30;
 ConversionHminMs();
 tiempoActivacion[1] = tiempoMs;
// Hora de la tercera toma
 hora = 15;
 minuto = 00;
 ConversionHminMs();
 tiempoActivacion[2] = tiempoMs;
// Hora de la cuarta toma
 hora = 18;
 minuto = 45;
 ConversionHminMs();
 tiempoActivacion[3] = tiempoMs;
// En caso de que haya más tomas, agregarlas a continuación:
// Hora final
 hora = 23;
 minuto = 59;
 ConversionHminMs();
 tiempoActivacion[4] = tiempoMs;
}
// Función loop
void loop()
{
// Envío señales iniciales al puente H: motor detenido
 digitalWrite(pinIN1, 0);
 digitalWrite(pinIN2, 0);
 analogWrite(pinPWM, valorPWM);
 Despliegue();
 delay(tiempoRet);
/* Mientras el tiempoActual sea menor que el tiempoActivacion[toma]
 + tiempoBase, sólo despliega la hora */
 do
 {
 Despliegue();
 delay(tiempoRet);
 tiempoActual = millis() + tiempoBase;
 } while(tiempoActual < tiempoActivacion[toma]);
/* Cuando el tiempoActual es mayor que el tiempoActivacion[toma]
 se sale de la estructura do–while, activa el motor, despliega la
 hora de toma y enciende la alarma */
 ActivaMotor();
 banderaAlarma = HIGH;
 do
 {
 // Despliegue de la hora de toma
 DespliegueHoraToma();
 Alarma();
 } while(banderaAlarma == HIGH);
/* La alarma se apagará cuando se oprima el botón de apagado, el
 cual hará que la variable banderaAlarma tome el valor LOW, de
 manera que se saldrá de la estructura do–while anterior */
// Borra lcd
 lcd.clear();
 toma++;
}
/* Función ConversionHminMs
 Convierte el tiempo en horas y minutos a milisegundos */
void ConversionHminMs()
{
 minuto = minuto + hora*60;
 tiempoMs = minuto*60000;
}
/* Función ConversionMsHmin
 Convierte el tiempo en milisegundos a horas y minutos */
void ConversionMsHmin()
{
 horaActual = tiempoActual/60/60000;
 minActual = tiempoActual/60000 - horaActual*60;
}
/* Función Despliegue
 Despliega en un LCD la hora, con formato hora:minutos 24 h
* Pin RS del LCD al pin 4
* Pin E del LCD al pin 6
* Pin D4 del LCD al pin 11
* Pin D5 del LCD al pin 12
* Pin D6 del LCD al pin 13
* Pin D7 del LCD al pin 14
* Pin R/W del LCD a tierra */
void Despliegue()
{
// Calcula el tiempoActual con respecto al tiempoBase
 tiempoActual = millis() + tiempoBase;
// Conversión del tiempoActual a horas:munutos
 ConversionMsHmin();
// Se inicializa el LCD
 lcd.begin(16,2);
// Se coloca el cursor en el origen
 lcd.setCursor(0,0);
// Limpia el primer renglón
 lcd.print(" ");
// Se coloca el cursor en el origen
 lcd.setCursor(0,0);
// Escribe el letrero Hora
 lcd.print("Hora ");
// Escribe horas:minutos
 lcd.print(horaActual);
 lcd.print(":");
 lcd.print(minActual);
}
/* Función Activa Motor
 Controla el motor de CD del pastillero, con base en
 la señal de un interruptor de lámina activa alta */
void ActivaMotor()
{
 do
 {
 digitalWrite(pinIN1, 1);
 estadoIntLamina = digitalRead(pinIntLamina);
 } while(estadoIntLamina == HIGH);
 delay(200);
 do
 {
 digitalWrite(pinIN1, 1);
 estadoIntLamina = digitalRead(pinIntLamina);
 } while(estadoIntLamina == LOW);
 digitalWrite(pinIN1, 0);
}
/* Función Alarma
 Hace sonar intermitentemente un buzzer, y al mismo tiempo
 prende un led intermitentemente, hasta que se oprime el
 botón de apagado de la alarma */
void Alarma()
{
 for (rep = 0; rep < numRep; rep++)
 {
 digitalWrite(pinBuzzer, HIGH);
 digitalWrite(pinLed1, HIGH);
 digitalWrite(pinLed2, HIGH);
 delay(tiempoEnc);
 digitalWrite(pinBuzzer, LOW);
 digitalWrite(pinLed1, LOW);
 digitalWrite(pinLed2, LOW);
 delay(tiempoApag);
 }
 delay(tiempoEspera);
}
/* Función Interruptor
 Rutina de servicio de interrupción */
void Interruptor()
{
 banderaAlarma = LOW;
}
/* Función DespliegueHoraToma
 Despliega en el segundo renglón del LCD la hora de la toma de
 las pastillas, indicando también a qué toma corresponde */
void DespliegueHoraToma()
{
 Despliegue();
// Calcula el tiempo de la toma con respecto al tiempoBase
 tiempoActual = tiempoActivacion[toma];
// Conversión del tiempoActual a horas:munutos
 ConversionMsHmin();
// Se coloca el cursor en el origen del segundo renglón
 lcd.setCursor(0,1);
// Limpia el segundo renglón
 lcd.print(" ");
// Se coloca el cursor en el origen
 lcd.setCursor(0,1);
// Escribe el número de la toma
 lcd.print(toma+1);
// Escribe el letrero "a toma "
 lcd.print("a toma ");
// Escribe horas:minutos
 lcd.print(horaActual);
 lcd.print(":");
 lcd.print(minActual);

}


Lista de tarea y cuestionarios de la semana 02:
Curso Coursera. Jesús Cruz

4. INTEGRANTES:
  • Jesús Cruz
  • Jefferson Laura

lunes, 18 de septiembre de 2017

PROYECTO 01: LED´S GIRATORIOS

PERSISTENCE OF VISION  (POV)

1. OBJETIVO GENERAL:

  • Programar e implementar con controlador PIC letrero de leds giratorio o persistence of vision (POV).
2. OBJETIVOS ESPECÍFICOS:

  • Desarrollar este proyecto para conocer mas sobre la programación en  lenguaje "c" ademas de implementarlo físicamente con un PIC determinado que cumpla con nuestras necesidades.
  • Realizar en el tiempo de 1 mes para, escribir la programación de este programa y implementar físicamente la tarjeta.
  • Resolver todos los problemas que se nos presenten, por que “Cada problema lleva en sí mismo la semilla de su propia solución”.
  • Desarrollar el letrero de led's giratorio para aplicar en el tema de marketing y publicidad.
3. JUSTIFICACIÓN: 

Este proyecto tiene un impacto muy bueno en la publicidad ya que es algo novedoso en cuanto a tecnología y ademas de llamativo para un usuario así logrando la atención de un cliente y mostrarle el producto que tengamos. 

El proyecto no es tan complejo de implementar ni tan costos por lo cual es ideal para el publico en general lo cual económicamente es muy bueno.

El POV (Persistence Of Vision) es un fenómeno visual descubierto por el científico belga Joseph Plateau que demuestra cómo una imagen permanece en la retina humana una décima de segundo antes de desaparecer completamente. Esto permite que veamos la realidad como una secuencia de imágenes que el cerebro "enlaza" como una sola imagen visual móvil y continua.

4. PIC 16F628A:


El  microcontrolador es un circuito o dispositivo programable capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales y del control y comunicación digital de diferentes dispositivos. El PIC 16f628a es un microcontrolador de 8 bit, posee una arquitectura RISC avanzada así como un juego reducido de 35 instrucciones. Este microcontrolador es el remplazo del obsoleto PIC16F84a, los pines del 16f628a so compatibles con el 16f84a, así que se podrán actualizar proyectos.
PIC16F628A de la empresa MICROCHIP
Hoja de datos del PIC 16F628A: 

4.1 PRINCIPALES CARACTERÍSTICAS:

1. CPU de alto rendimiento RISC:

  • Velocidad de operación de CD- 20MHz.
  • Capacidad de interrupción.
  • Pila de 8 niveles.
  • Modos de direccionamiento directos, indirectos y relativo.
  • 35 simples instrucciones de palabras.
  • Todas las instrucciones de ciclo único, excepto las de salto.
2. Características especiales del microcontrolador:
  • Opciones de oscilador interno y externo.
  • Precisión de fabrica de oscilador interno de 4 MHz calibrada a ±1%.
  • Oscilador de 48 KHz de bajo consumo interno.
  • Modo de ahorro de energía en modo sueño.
  • Resistencia programable  pul-ups del PORTB.
  • Multiplexado del pin reset/entrada -pin.
  • Temporizador Watchdog con oscilador independiente para un funcionamiento fiable.
  • Baja tensión de programación In-Circuit Serial ( a través de dos pines).
  • Protección de código programable.
  • Brown-out rset.
  • Power-on reset.
  • Power-up Timer y el oscilador de puesta en marcha del temporizador.
  • Amplio rango de funcionamiento de tensión (2.0- 5.5V).
  • Industrial y amplia gama de temperaturas extendidas.
  • Alta durabilidad de la memoria FLASH/EEPROM: *100 000 ciclos de escritura FLASH.         * 1 000 000  ciclos de escritura EEPROM. * 40 años de retención de datos.
3. De baja potencia características:
  • Corriente en espera: 100 nA@2.0V, típico.
  • Corriente de funcionamiento:  *12μA @ 32 kHz, 2,0V, típica. * 120μA @ 1 MHz, 2,0V, típica.
  • Temporizador WATCHDOG: 1μA@2.0V, típico.
  • TIMER01 oscilador:  1.2μA @ 32 KHz, 2.0V. típica.
  • Doble velocidad seleccionable del oscilador interno: * Tiempo de ejecución seleccionable entre 4MHz y de 48KHz. * 4μs despertar de un sueño, 3.0V, Típico.
Distribución del pines del PIC 16F628A


Los pines I/O (Input/Output) están organizados en 5 puertos:
  • Puerto A: 8 pines
  • Puerto B: 8 pines
  • Pin VSS and Pin VDD

5. DIAGRAMA INTERNO DEL PIC 16F628A:



Diagrama interno PIC16F628A


6. FLUJOGRAMA DEL SISTEMA:

7. ESTRUCTURA DEL SISTEMA:


8. CÓDIGO EN C COMPILLER.

PRUEBA 01: Hemos usado el PIC16F877A-Puerto "B" y el mensaje es "HOLA". En esta prueba quisimos ver si la idea que teníamos podría funcionar. La simulación nos salio perfectamente bien, pero nos dimos cuenta que era un PIC demasiado grande para nuestro proyecto. Usamos el clock de 20MHz referencia de datasheet. Trabajamos con mili-segundos para que sea perceptible por la vista.

#include <16f877a.h>
#fuses hs,nowdt
#use delay(clock=20M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}

void letrah()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b00010000);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}

void letrao()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b10000001);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}

void letral()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b10000000);
delay_ms(4000);

apagar();
delay_ms(1000);
}

void letraA()
{
output_b(0b11111111);
delay_ms(1000);

output_b(0b00010001);
delay_ms(3000);

output_b(0b11111111);
delay_ms(1000);

apagar();
delay_ms(1000);
}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);
while(true)
  {
  letrah();
  letrao();
  letral();
  letraA();
  delay_ms(3000);
  }


}
Simulación en ISIS
Características de carga

PRUEBA02: Cambiamos el PIC16F877A por uno con menos instrucciones, escogimos el 17F84A. Los resultados salieron satisfactoriamente bien pero el PIC ya era obsoleto y por recomendación del profesor cambiamos a otro PIC. El tiempo de trabajo lo reducimos un poco más pero sigue en el rango de mili-segundos. Modificamos el clock de 20MHz a 4MHz, para ellos nos guiamos del datasheet. El mensaje a aparecer es "UCONTROLADORES" en referencia al curso.

 #include <16f84a.h>
#fuses hs,nowdt
#use delay(clock=4M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}
void letraU()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000000);
delay_ms(300);
output_b(0b11111111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraC()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(400);
apagar();
delay_ms(100);
}
void letraO()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(300);
output_b(0b11111111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraN()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b00001111);
delay_ms(100);
output_b(0b00111000);
delay_ms(100);
output_b(0b11100000);
delay_ms(100);
output_b(0b11111111);
delay_ms(100);
apagar();
}
void letraE()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10010001);
delay_ms(400);
apagar();
delay_ms(100);
}


void letraA()
{
output_b(0b11111111);
delay_ms(100);

output_b(0b00010001);
delay_ms(300);

output_b(0b11111111);
delay_ms(100);

apagar();
delay_ms(100);
}
void letraT()
{
output_b(0b00000001);
delay_ms(200);
output_b(0b11111111);
delay_ms(100);
output_b(0b000000001);
delay_ms(200);
apagar();
delay_ms(100);
}
void letraR()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b00011001);
delay_ms(100);
output_b(0b00101001);
delay_ms(100);
output_b(0b01001001);
delay_ms(100);
output_b(0b10001111);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraL()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000000);
delay_ms(400);
apagar();
delay_ms(100);
}
void letraD()
{
output_b(0b11111111);
delay_ms(100);
output_b(0b10000001);
delay_ms(200);
output_b(0b01000010);
delay_ms(100);
output_b(0b00111100);
delay_ms(100);
apagar();
delay_ms(100);
}
void letraS()
{
output_b(0b10011111);
delay_ms(100);
output_b(0b10011001);
delay_ms(300);
output_b(0b11111001);
delay_ms(100);
apagar();
delay_ms(100);

}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);

while(true)
  {
  letraU();//listo
  letraC();//listo
  letraO();//listo
  letraN();//listo
  letraT();//listo
  letraR();//listo
  letraO();//listo
  letraL();//listo
  letraA();//listo
  letraD();//listo
  letraO();//listo
  letraR();//listo
  letraE();//listo
  letraS();//listo

  delay_ms(3000);
  }
}


Simulación ISIS
Características de carga

PRUEBA03: Finalmente decidimos trabajar con el PIC16F628A. el cual es el PIC reemplazo del 16F84A, nos facilito la conexión ya que tenían la misma configuración de entradas y salidas. Nuestro mensaje a aparecer es "UCONTROLADORES" en referencia al nombre del curso. Modificamos los mili-segundos a micra-segundos.  Modificamos el clock de 20MHz a 4MHz, para ellos nos guiamos del datasheet.

#include <16f628a.h>
#fuses hs,nowdt
#use delay(clock=4M)

void apagar()
{
output_b(0b00000000);

}

void encender()
{
output_b(0b11111111);
}
void letraU()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000000);
delay_us(2400);
output_b(0b11111111);
delay_us(800);
apagar();
delay_us(800);
}
void letraC()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(3200);
apagar();
delay_us(800);
}
void letraO()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(2400);
output_b(0b11111111);
delay_us(800);
apagar();
delay_us(800);
}
void letraN()
{
output_b(0b11111111);
delay_us(800);
output_b(0b00001111);
delay_us(800);
output_b(0b00111000);
delay_us(800);
output_b(0b11100000);
delay_us(800);
output_b(0b11111111);
delay_us(800);
apagar();
}
void letraE()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10010001);
delay_us(3200);
apagar();
delay_us(800);
}


void letraA()
{
output_b(0b11111111);
delay_us(800);

output_b(0b00010001);
delay_us(2400);

output_b(0b11111111);
delay_us(800);

apagar();
delay_us(800);
}
void letraT()
{
output_b(0b00000001);
delay_us(1600);
output_b(0b11111111);
delay_us(800);
output_b(0b000000001);
delay_us(1600);
apagar();
delay_us(800);
}
void letraR()
{
output_b(0b11111111);
delay_us(800);
output_b(0b00011001);
delay_us(800);
output_b(0b00101001);
delay_us(800);
output_b(0b01001001);
delay_us(800);
output_b(0b10001111);
delay_us(800);
apagar();
delay_us(800);
}
void letraL()
{
output_b(0b11111111);
delay_us(1800);
output_b(0b10000000);
delay_us(3200);
apagar();
delay_us(800);
}
void letraD()
{
output_b(0b11111111);
delay_us(800);
output_b(0b10000001);
delay_us(1600);
output_b(0b01000010);
delay_us(800);
output_b(0b00111100);
delay_us(800);
apagar();
delay_us(800);
}
void letraS()
{
output_b(0b10011111);
delay_us(800);
output_b(0b10011001);
delay_us(2400);
output_b(0b11111001);
delay_us(800);
apagar();
delay_us(800);

}
void main()
{
set_tris_b(0b00000000);
output_b(0b00000000);

while(true)
  {
  letraU();//listo
  letraC();//listo
  letraO();//listo
  letraN();//listo
  letraT();//listo
  letraR();//listo
  letraO();//listo
  letraL();//listo
  letraA();//listo
  letraD();//listo
  letraO();//listo
  letraR();//listo
  letraE();//listo
  letraS();//listo

  delay_ms(3000);
  }
}
Simulación ISIS
Características de carga


9. OBSERVACIONES Y CONCLUSIONES:

  • Nuestro proyecto sirve de gran utilidad por su versátil de control y re-programación que se puede ajustar a diferentes necesidades.
  • Está de más resaltar la gran importancia y avance tecnológico que tiene hoy en día el lenguaje C al igual que los pic que salen al mercado y las grandes e interesantes cosas que podemos hacer con ellos.
  • Se diseñó y se implementó los leds giratorios que muestran el mensaje al usuario todo esto gracias al pic 16f628a.
  • Fue importante entender perfectamente el funcionamiento del 16f28a; al principio nuestro código no funcionaba pero gracias a la intervención del profesor y algunos cambios que hicimos en fuses; elprograma funciono correctamente.
  • Era importante determinar la velocidad de giro de nuestros led´s ya que solo a  una velocidad específica el mensaje programado podría ser visualizado.
  • Finalmente se puede decir que este proyecto es factible y sencillo de armar, puesto que todos los dispositivos que intervienen en él, están disponibles en el mercado, aunque su información referente a su funcionamiento es poca se puede entender con ver vídeos sobre este.

10. INTEGRANTES:
  • Cruz Díaz, Jesús Andrée
  • Miovich Chepmapoco, Jefferson
  • Granda Alvarez, Waldir
  • Laura Tite, Jefferson
 

domingo, 3 de septiembre de 2017

AÑADIENDO LUCES, SONIDO, MOTORES Y DISPLAY 7 SEGMENTOS

1. EJERCICIOS REALIZADOS EN LABORATORIO
1.1Realice un programa para manejar led´s conectados al puerto C.
 1.1.1 Código C Compiler


1.1.2 Simulación en Proteus



1.2 Realice un programa utilizando el DISPLAY DE 7 SEGMENTOS.
Código en C Compiler

Simulación en Proteus



2. PROYECTO 01: MÁQUINA EXPENDEDORA DE ALGUNOS PRODUCTOS
2.1 FLUJOGRAMA DEL SISTEMA

2.2 ESTRUCTURA DEL SISTEMA


2.3 PROGRAMA Y SIMULACIÓN
Código en C Compiler


#include <16f877a.h>
#use delay (clock=20M)
#fuses HS, NOPROTECT, NOWDT

#define LCD_ENABLE_PIN        PIN_D3
#define LCD_RS_PIN            PIN_D2
#define LCD_RW_PIN            PIN_A0
#define LCD_DATA4             PIN_D4
#define LCD_DATA5             PIN_D5
#define LCD_DATA6             PIN_D6
#define LCD_DATA7             PIN_D7  
#include <lcd.c>
#define use_portb_kbd TRUE
#include <kbd.c>
void main()

{
   char k;
   int x;
   int j;
   lcd_init ();
   kbd_init ();
   port_b_pullups (TRUE);
   
       for(j = 1;j<16;j++)
            {
               printf(lcd_putc,"\f");
               lcd_gotoxy(4,1);
               printf(lcd_putc,"Bienvenido");
               delay_ms(100);
               printf(lcd_putc,"\n");
               lcd_gotoxy(j,2);
               printf(lcd_putc,"temperatura 28°C");
               delay_ms(300);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"temperatura 28°C");
            }
      while(true)
      {
      if(input(pin_a1)==1)
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fpro:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fPro:galleta"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\fvuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>1 && x<3)
            {
               printf(lcd_putc, "\fPro:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 2.00");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fPro:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 4.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
                
            }
             if(x>=4 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"    Producto");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
            }
            }
            
           
         }
      }
      
      
      if(input(pin_a2)==1)
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fpro:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fPro:galleta"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 2.00");
               output_high(pin_c3);
               delay_ms(2000);
               output_low(pin_c3);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"vuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>1 && x<3)
            {
               printf(lcd_putc, "\fPro:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c1);
               delay_ms(2000);
               output_low(pin_c1);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"vuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fPro:cerveza"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"falta credito");
               delay_ms(550);
               printf(lcd_putc,"\ninserte$: 2.00");
               delay_ms(500);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
                
            }
             if(x>=4 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"     Producto");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
            }
            }
            
           
         }
      }
      
        if(input(pin_a3)==1)
      {
         k=kbd_getc();
         x=k-48;
         if(k!=0)
         {
            lcd_gotoxy(1,1);
             if(x>=1 && x<=9)
                  { printf(lcd_putc,"\fpro:%i",x);
            if(x>0 && x<2)
            {
               printf(lcd_putc, "\fPro:galleta"); 
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c0);
               delay_ms(2000);
               output_low(pin_c0);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 4.00");
               output_high(pin_c3);
               delay_ms(2000);
               output_low(pin_c3);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"vuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>1 && x<3)
            {
               printf(lcd_putc, "\fPro:gaseosa");
               delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc," despachando....");
               output_high(pin_c1);
               delay_ms(2000);
               output_low(pin_c1);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"vuelto $: 2.00");
               output_high(pin_c3);
               delay_ms(2000);
               output_low(pin_c3);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"vuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
              
            }
             if(x>2 && x<4)
            {
               printf(lcd_putc, "\fPro:cerveza"); 
                delay_ms(550);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"despachando...");
               output_high(pin_c2);
               delay_ms(2000);
               output_low(pin_c2);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"\fvuelva pronto...");
               delay_ms(1000);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
                
            }
             if(x>=4 && x<=9)
            {
               printf(lcd_putc, "\f   Elija Otro"); 
               delay_ms(200);
               printf(lcd_putc,"\n");
               printf(lcd_putc,"    Producto");
               delay_ms(100);
               printf(lcd_putc,"\f");
               printf(lcd_putc,"  Bienvenidos");
               printf(lcd_putc,"\n");
               printf(lcd_putc,"Temperatura 28°C");
            }
            }
            
           
         }
      }
}

}
Simulación en Proteus


3. OBSERVACIONES Y CONCLUSIONES
3.1 OBSERVACIONES

  • Es necesario habilitar los display para poder mostrar el contador. En las cadenas de caracteres la primera variable siempre se la llamara con la posición de 0.
  • Podemos trabajar con valores enteros, hexadecimales, binarios para hacer nuestros programas en C Compiler.
  • Nuestro proyecto sirve de gran utilidad por su versátil control y reprogramación que se puede ajustar a diferentes necesidades

3.2 CONCLUSIONES

  • En este laboratorio aprendimos a usar la función for el cual funciona como un contador ya que posee de tres partes inicialización, condición e incremento, donde es necesario que se cumpla la condición para poder desarrollar dicho proceso. Pudimos desarrollar un programa con el bucle for que nos permitió diseñar un contador ascendente de 0 a 9 y también mostrarlo en el display del entrenador. También aprendimos a usar cadenas de caracteres, están toman y almacenan varias variables enteras. 
  • Para la creación de nuestra maquina expendedora tuvimos que emplear todos los conocimientos adquiridos en el transcurso del mes, al principio se nos dificulto pero con paciencia y esfuerzo se nos fue posible crear el programa.
  • Está de más resaltar la gran importancia y avance tecnológico que tiene hoy en día el lenguaje C al igual que los pic que salen al mercado y las grandes e interesantes cosas que podemos hacer con ellos.

4. INTEGRANTES

  • Cruz Diaz, Jesus Andrée
  • Chara Velazco, Juan Carlos
  • Granda Alvarez, Waldir Andrée

PROYECTO FINAL

1. ARDUINO UNO: Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multid...